在程序中为什么找不到checkbox控件,代码如下
前台
<asp:DataList id="DataList1" runat="server" Width="100%">
<ItemTemplate>  <table border="0" width="100%" ID="Table2">
<tr>
   <td width="100%"><input type="checkbox"  id="C_<%# DataBinder.Eval(Container.DataItem, "id") %>"  value="<%# DataBinder.Eval(Container.DataItem, "id") %>"><%# DataBinder.Eval(Container.DataItem, "name") %></td>
</tr>
</TABLE>
</ItemTemplate>
</asp:DataList>
后台
for (int i=0;i<DataList1.Items.Count ;i++)    
{
CheckBox CheckBox1= new CheckBox ();
CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("C_2");//老是说checkbox未定义
if (CheckBox1 !=null) 
{
hsjdata.Alert ("ok",Page);
}
else
{
hsjdata.Alert ("sorry",Page);
}
}
我找到那控件后就将他选中,请各位指点,万分感激

解决方案 »

  1.   

    把CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("C_2")换成
    checkbox1 = ((checkbox)datalist.items[i].findcontrol("name")).text.tostring();
      

  2.   

    楼上的大哥,不行呀,checkbox1 这是控件,不是string,请大家帮忙呀,我等到花儿也谢了
      

  3.   

    前台里给CheckBox的ID命名的时候不要用绑定,而且要用服务器端的控件CheckBox,不要用客户端的input,可以改为
    <asp:DataList id="DataList1" runat="server" Width="100%">
    <ItemTemplate>  <table border="0" width="100%" ID="Table2">
    <tr>
       <td width="100%"><asp:CheckBox id="CheckName" value="<%# DataBinder.Eval(Container.DataItem, "id") %>"></CheckBox><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    </TABLE>
    </ItemTemplate>
    </asp:DataList>然后在后台:
    for (int i=0;i<DataList1.Items.Count ;i++)    
    {
    CheckBox CheckBox1= new CheckBox ();
    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("CheckName");//老是说checkbox未定义
    if (CheckBox1 !=null) 
    {
    hsjdata.Alert ("ok",Page);
    }
    else
    {
    hsjdata.Alert ("sorry",Page);
    }
    }
      

  4.   

    for (int i=0;i<DataList1.Items.Count ;i++)    
    {
    CheckBox CheckBox1= new CheckBox ();
    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("C_2");//老是说checkbox未定义
    if (CheckBox1 !=null) 
    {
    hsjdata.Alert ("ok",Page);
    }
    else
    {
    hsjdata.Alert ("sorry",Page);
    }
    }这段代码你是在ItemCreated事件中写的吗?
    如果是,把它移到:ItemDataBound事件中试一下
      

  5.   

    <asp:DataList id="DataList1" runat="server" Width="100%">
    <ItemTemplate>  <table border="0" width="100%" ID="Table2">
    <tr>
       <td width="100%"><asp:CheckBox id="CheckName" value="<%# DataBinder.Eval(Container.DataItem, "id") %>"></asp:CheckBox><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    </TABLE>
    </ItemTemplate>
    </asp:DataList>然后在后台:
    for (int i=0;i<DataList1.Items.Count ;i++)    
    {
    CheckBox CheckBox1= new CheckBox ();
    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("CheckName");//老是说checkbox未定义
    if (CheckBox1 !=null) 
    {
    hsjdata.Alert ("ok",Page);
    }
    else
    {
    hsjdata.Alert ("sorry",Page);
    }
    }
      

  6.   

    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("C_2");
    改爲
    CheckBox1 =(CheckBox)e.Items [i].FindControl("C_2");//
      

  7.   

    你的checkbox不是服务器端控件能这样绑定么?
      

  8.   

    我上面的有点错误,改成这样应该可以了:
    <asp:DataList id="DataList1" runat="server" Width="100%">
    <ItemTemplate>  <table border="0" width="100%" ID="Table2">
    <tr>
       <td width="100%"><asp:CheckBox id="CheckName" value="<%# DataBinder.Eval(Container.DataItem, "id") %>" Runat="Server"></asp:CheckBox><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    </TABLE>
    </ItemTemplate>
    </asp:DataList>然后在后台:
    for (int i=0;i<DataList1.Items.Count ;i++)    
    {
    CheckBox CheckBox1= new CheckBox ();
    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("CheckName");//老是说checkbox未定义
    if (CheckBox1 !=null) 
    {
    hsjdata.Alert ("ok",Page);
    }
    else
    {
    hsjdata.Alert ("sorry",Page);
    }
    }
      

  9.   

    findcontrol是找控键的ID。然后把这个转换成你对应的控键类型,再对其操作
      

  10.   

    <asp:DataList id="DataList1" runat="server" Width="100%">
    <ItemTemplate>  <table border="0" width="100%" ID="Table2">
    <tr>
       <td width="100%"><asp:CheckBox id="CheckName" value="<%# DataBinder.Eval(Container.DataItem, "id") %>" Runat="Server"></asp:CheckBox><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    </TABLE>
    </ItemTemplate>
    </asp:DataList>然后在后台:
    for (int i=0;i<DataList1.Items.Count ;i++)    
    {
    CheckBox CheckBox1;
    CheckBox1 =(CheckBox)DataList1.Items [i].FindControl("CheckName");//老是说checkbox未定义
    if (CheckBox1 !=null) 
    {
    hsjdata.Alert ("ok",Page);
    }
    else
    {
    hsjdata.Alert ("sorry",Page);
    }
    }这样就可以吧
      

  11.   

    CheckBox的id不能进行绑定吗,我想让他动态生成不行吗,
      

  12.   

    那个checkbox没有value那个属性也,不爽
      

  13.   

    CheckBox的id不能进行绑定吗,我想让他动态生成不行吗,他自己就会动态生成id的啊,你看客户端代码的id
      

  14.   

    对不起,上面的说法是错误的,因为你并没有用服务器控件或者input加上runat=server,
    而不是runat=server的话服务器端用findcontrol是找不到的
      

  15.   

    <ItemTemplate>
    <tr>
    <td width="100%"><INPUT id="CheckName"  type="checkbox"  runat="server" value=<%# DataBinder.Eval(Container.DataItem, "id") %> NAME="CheckName"><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    </ItemTemplate>
    我现在改成了这样,我想那个id用自已的想法生成比如CheckName_1,CheckName_2等等,请问各们前辈该怎么实现,查看客户端的源码,是<input name="DataList1:_ctl3:CheckName" id="DataList1__ctl3_CheckName" type="checkbox" value="4" />行业分类管理</td>
    目前在做权限那块,如果数据库里面有其id的话,就选中,否则不选中,这些问题应该很常见的,不知道各位是如何实现的,
      

  16.   

    如果已经在html页面上绑定了字段,那还需要findcontrol吗?