我需要按顺序取得所有的datalist中显示的ID值,我做的是考试页面,需要将学生做的每一题的答案写回数据库,但是,我却只能显示出题目,而不知道如何重新获取所显示题目的ID值,
麻烦各位高手指教一下啊
相关代码如下:
  <asp:DataList ID="dlstSimple" ItemStyle-Width="100%" DataKeyField="id" runat="server">
    <itemtemplate>
<table width="700" border="1" cellspacing="0" bordercolor="#CCCCCC">
  <tr>
    <td width="5%" align="center"><% Response.Write(i+1) %><% i=i+1 %>:</td>
    <td><%#  DataBinder.Eval(Container.DataItem,"question") %>
   <input type="text" id=aaa value="<%#DataBinder.Eval(Container.DataItem,"id")%>">
</td>
  </tr>
  <tr>
    <td><asp:RadioButton ID="rdb1"  GroupName="Simple" runat="server" /></td>
    <td>A:&nbsp;<%# DataBinder.Eval(Container.DataItem,"aA") %></td>
  </tr>
  <tr>
    <td><asp:RadioButton ID="rdb2" GroupName="Simple" runat="server" /></td>
    <td>B:&nbsp;<%# DataBinder.Eval(Container.DataItem,"aB") %></td>
  </tr>
  <tr>
    <td><asp:RadioButton ID="rdb3" GroupName="Simple" runat="server" /></td>
    <td>C:&nbsp;<%# DataBinder.Eval(Container.DataItem,"aC") %></td>
  </tr>
  <tr>
    <td><asp:RadioButton ID="rdb4" GroupName="Simple" runat="server" /></td>
    <td>D:&nbsp;<%# DataBinder.Eval(Container.DataItem,"aD") %></td>
  </tr>
  <tr>
    <td><asp:RadioButton ID="rdb5" GroupName="Simple" runat="server" /></td>
    <td>E:&nbsp;<%# DataBinder.Eval(Container.DataItem,"aE") %></td>
  </tr>
</table>
</itemtemplate>
  </asp:DataList>

解决方案 »

  1.   

    哎呀,你再从数据库取出来的时候,你就可以用一个数组,比如ArrayList来保存他的ID嘛。当然也可以保存答案啊。什么的
      

  2.   

    DataGrid1.DataKeys(e.Item.ItemIndex)  --- 主键ID
      

  3.   

    当然首先应该绑定该字段DataGrid1.DataSource= ...
    DataGrid1.DataKeyField="主键ID"
    DataGrid1.DataBind()
      

  4.   

    应该在dataset中取ID,另外在select查询语句中应该包含ID字段,就可以取得ID
      

  5.   

    可以先绑定主键 DataGrid1.DataKeyField="主键ID"其实我觉得你总是得遍历所有的cell,你为什么不能在遍历的时候再获取这个ID呢?
      

  6.   

    不是很懂楼主的意思,不知道可不可以先做个HIDDEN属性的控件保存ID值?
      

  7.   

    我做了一个hidden控件,但是取值的时候老是有问题
      

  8.   

    你应对datalist绑定主键,这样取就方便了,就如  sukaru(逍遥子) 所说的.具体如下:this.datalist1.DataSource = 数据集
    this.datalist1.DataKeyField = "xxid";
    this.datalist1.DataBind();然后,在取值的时候就可以这样
    for(int i=0;i<this.datalist1.Items.Count;i++)
    {
    xxid = this.datalist1.DataKeys[i].ToString();
    }不必自己做hidden去保存,太麻烦.
      

  9.   

    hchxxzx(NET?摸到一点门槛)
    楼上,我想问一下,如果我在datalist绑定后加了radiolist或是textbox,在触发事件的时候,如何获得他们的值?
      

  10.   

    如下:TextBox mybox = (TextBox)this.DataList1.Items[触发的行数].FindControl("TextBox的ID");
    值 = mybox.Text;
      

  11.   


    其实我觉得你总是得遍历所有的cell,你为什么不能在遍历的时候再获取这个ID呢?
      
     如何遍历获取呢?
    麻烦你给点资料啊或者讲解一下啊,因为我既需要得到ID,也需要得到在一个ID对应的题目中,考生所选择/填写的答案
    谢谢啦
      

  12.   

    hchxxzx(NET?摸到一点门槛) 
    现在的问题是,我不知道radiolist或是textbox的ID或是数量,我得遍历datalist来判断,
    foreach( Control c in this.Controls)
    {
    string strtype =c.GetType().ToString();
    if (c.GetType().ToString()== "System.Web.UI.HtmlControls.HtmlForm")


    {
    foreach (Control tb in c.Controls) 
    {    
    //string strtb = tb.GetType().ToString();
    if ( tb is TextBox )
    {
                //string bbb = ( ( TextBox ) tb ).Text.ToString();
    }
    else
    {
    if(tb is RadioButtonList)
             {
    string aaa = ((RadioButtonList)tb).SelectedValue.ToString();
    }
    }

    }
    }
    上面的方法只遍历了大的控件,并没有遍历到datalist里边绑定的控件,请教,如何遍历datalist里边绑定的控件?
      

  13.   

    在DATALIST绑定之后,立即执行如下
    for(int i=0;i<this.datalist1.Items.Count;i++)
    {
    //取键值
    xxid = this.datalist1.DataKeys[i].ToString();
    //这个就是取到DATALIST里面的控件,其他的控件也类似于此
    TextBox mybox = (TextBox)this.DataList1.Items[i].FindControl("TextBox的ID");}