如题:
一个datalist1嵌套了一个datalist2,
这两个datalist里面都绑定了checkbox,
现在的问题就是如何获取这两个datalist的checkbox的值。<asp:DataList ID="DataList1" runat="server" Width="769px" OnItemDataBound="DataList1_ItemDataBound">
            <ItemTemplate>
             <table width="99%" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor="#999966">
<tr>
    <td bgcolor="#fbfbff">
   <asp:Label runat="server" ID="yj" Text='<%#Eval("id") %>' Visible="false"></asp:Label><asp:CheckBox ID="chk" runat="server" Text='<%# Eval("id") %>' /><%#Eval("sh_xiang") %>
   </td>
  </tr>
  <tr>
    <td align="left" bgcolor="#ffffff">
        <asp:DataList ID="DataList2" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" Width="100%">
            <ItemTemplate>
            <asp:CheckBox ID="chk0" runat="server" Text='<%# Eval("id") %>' /><%#Eval("sh_xiang") %>
            </ItemTemplate>
        </asp:DataList></td>
  </tr>
</table>
            </ItemTemplate>
        </asp:DataList>
后台代码:
 string strsql = "(";
        CheckBox mychk = new CheckBox();
        for (int i = 0; i < DataList1.Items.Count; i++)
        {
           mychk = (CheckBox)DataList1.Items[i].FindControl("chk");
               // strsql = strsql + ((CheckBox)this.DataList1.Items[i].FindControl("chk")).Text.Trim() + ",";
           if (mychk.Checked == true)//如果是=就全部显示出来,==就没有结果
           {
               strsql = strsql + ((CheckBox)this.DataList1.Items[i].FindControl("chk")).Text.Trim() + ",";
           }
         }
         if (strsql == "(")
         {
             Response.Write("<script>alert('选择项不能为空!请选择要推荐的项!');history.go(-1);</script>");
         }
         else
         {
            strsql = strsql.Substring(0, strsql.Length - 1) + ")";
            Response.Write(strsql);
         }
       yjbind();

解决方案 »

  1.   


    foreach (DataListItem item in DataList1.Items)
                {               //获取前台控件
                    CheckBox chkbox = item.FindControl("chk") as CheckBox;
    if (chkbox == null || lblID== null)
                    {
                        continue;
                    }
                    if (chkbox.Checked)
    {
    Response.Write(chkbox.Text);}
    }
      

  2.   

    哎,自己顶一下,外层checkbox已经能够获取了,可是内层的却得不到DataList rp = (DataList)DataList1.FindControl("DataList2");
                CheckBox ch0 = (CheckBox)rp.FindControl("chk0");
    //提示未将对象引用设置到对象的实例
                foreach (DataListItem item in rp.Items)
                {
                    string ckb = "";
                    if (ch0.Checked)
                    {
                        ckb = rp.DataKeys[item.ItemIndex].ToString();
                        Response.Write(ckb);
                    }
                } 
    //前台
    <asp:DataList ID="DataList1">
    ...
    <asp:DataList ID="DataList2" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" Width="100%" DataKeyField="id">
                <ItemTemplate>
                <asp:CheckBox ID="chk0" runat="server" Text='<%# Eval("id") %>' /><%#Eval("sh_xiang") %>
                </ItemTemplate>
            </asp:DataList>
    ...
     </asp:DataList>
      

  3.   

    foreach (DataListItem item in DataList1.Items)
                {               //获取前台控件
                    CheckBox chkbox = item.FindControl("chk") as CheckBox;
    if (chkbox == null || lblID== null)
                    {
                        continue;
                    }
                    if (chkbox.Checked)
    {
    Response.Write(chkbox.Text);}
    }
    dataBinding事件中读到checkbox 然后看它是被否选中
      

  4.   

    各位高手,我的问题已经解决了,可是级联的问题又出来了,那就是
    我将checkbox的值加到了数据库后,字段呈现值是:1,3,4,5,6
    现在我想修改这些checkbox,也就是说,将这些1,3,4,5,6分割成数组后和checkbox的id对应,如果相等就让他为选中状态,反之不选中。我的理解应该没错吧。可是不会写。请各位大侠指点迷津。
      

  5.   

    string seleCheckBox=string.Empty;
    seleCheckBox=数据库中的字符串
    数组= seleCheckBox.split(",");
    for(int i=0;i<数组长度;i++)
    {
      for(int j=0;j<页面中的checkBox.length;j++)
     {
      if(数组[i].Equals(页面中的checkBox[j].text))
      {
         页面中的checkBox[j].checked=true;
      }
      }
    }