datalist有个label控件和数据源绑定数据,但是在itemcommand里面取不到绑定的值,不知道该怎么解决,请各位老大给出合理的方法。

解决方案 »

  1.   

    DataKeyField对应该字段,取的时候datalist.DataKeys[e.Item.ItemIndex];
      

  2.   

    <ItemTemplate>
    <asp:Label id="lblID" runat="server" Width="0px" Height="0px">
    <%# DataBinder.Eval(Container.DataItem,"id") %>
    </asp:Label>
    <asp:Label id="lblPID" runat="server" Width="0px" Height="0px">
    <%# DataBinder.Eval(Container.DataItem,"parentid") %>
    </asp:Label>
    </ItemTemplate>后台itemcommand
    Label myid = (Label)e.Item.FindControl("lblID");
    Label mypid = (Label)e.Item.FindControl("lblPID");
    string id = myid.Text;-为空值但是实际显示的时候却是有值
    string pid = mypid.Text;-为空值但是实际显示的时候却是有值page_load
    if(!IsPostBack)
    {
    //查询xml文件,绑定name

    string mypath = Server.MapPath("A.xml");
    DataSet myds = new DataSet();
    myds.ReadXml(mypath);
    DataList1.DataSource = myds.Tables[1];
    DataList1.DataBind();
    }
      

  3.   

    to zxw17594840:
    我要的不仅仅是那个id!!!
      

  4.   

    if (e.Item.ItemType == ListItemType.Item || 
                 e.Item.ItemType == ListItemType.AlternatingItem)
             {
    ////
    }
    你的数据源是啥,DataReader?都可以得到的
      

  5.   

    to net_lover:
    我的数据源?呵呵,我的page_load里面不是写的很明白么?
      

  6.   

    to net_lover:
    按你说的做了,可是还是一样的没有结果
      

  7.   

    你要在服务端读取Label的Text值,需得把数据绑定到Label的Text上.
    即:
    <asp:Label id="lblID" runat="server" Width="0px" Height="0px" text=<%# DataBinder.Eval(Container.DataItem,"id") %>>
    </asp:Label>
      

  8.   

    to MyLf:
    我曾经把databinder这段语句放到textbox的属性设置时候text属性里面但是在html体现的还是我上面那种显示。为什么要这样专门写在<>里面就可以了 ?
      

  9.   

    我是用vb.net测试的,写在label的Text属性里面是好用的,这样在DataGrid_ItemCommand里就可以调用label.Text的值了,感觉好像javascript中的innerHTML和innerText,生成源文件好像一样,但是在控制上就不一样了。<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 492px; POSITION: absolute; TOP: 124px"
    runat="server" DataSource="<%# DataSet12 %>" DataMember="Staff" DataKeyField="SName" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:Label Runat="server" ID="dd" Text='<%# DataBinder.Eval(Container.DataItem,"SName")%>'>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:ButtonColumn Text="选择" CommandName="Select"></asp:ButtonColumn>
    </Columns>
    </asp:DataGrid></FONT>
      

  10.   

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
          
            Me.OleDbDataAdapter1.Fill(Me.DataSet12)
            Me.DataGrid1.DataSource = Me.DataSet12
            Me.DataBind()
        End Sub    Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand
            If e.CommandName = "Select" Then
                Response.Write(CType(e.Item.FindControl("dd"), System.Web.UI.WebControls.Label).Text)
            End If
        End Sub
      

  11.   

    html体现的还是我上面那种显示
    --------- 没有明白你的意思。Label在IE上的显示,这两种方式都是一样的。不同的是,页面的__VIEWSTATE不一样,在其中它记录了Label的Text信息.
      

  12.   

    to MyLf:
    我的意思就是我在设计的时候就把label的text属性设置为DataBinder.Eval(Container.DataItem,"id"),可是当再次进入html设计页面的时候发现内容还是
    <asp:Label id="lblPID" runat="server" Width="0px" Height="0px">
    <%# DataBinder.Eval(Container.DataItem,"parentid") %>
    </asp:Label>类似这样的!
    “页面的__VIEWSTATE不一样,在其中它记录了Label的Text信息.”那这两种方式如果是写在<>里面就有viewstate能保持状态?
      

  13.   

    to Selina_621() :谢谢你的代码,不过这些我都会写,我只是想知道前面讨论的两种不同绑定带来效果的不同的原因,你知道么?
      

  14.   

    to jimu8130(狗日的吕刚,可惜的班古拉) 
    有了ID在取其他的值应该没问题的啊?