Repeater中的复选框

问题描述:

我试图在复选框中使用复选框获取两个主类别,但我没有问题,但是当我尝试在同一个数据库表上使用Checkbox.CheckChanged时获取子类别时,首先复选框为没有反应,但第二个工作没有任何问题。我们如何解决这种情况?Repeater中的复选框

Checbox Filtering可能不太好,但仍需要修复。

list.aspx

<asp:Repeater ID="rptcat" runat="server"> 
     <ItemTemplate> 
      <ul> 
       <li> 
        <asp:CheckBox ID="main_cat" runat="server" type="checkbox" OnCheckedChanged="main_cat_CheckChanged" AutoPostBack="True" Text='<%# Eval("cat_name") %>' data-id='<%# Eval("cat_id") %>' />            
       </li>   
      </ul> 
     </ItemTemplate> 
</asp:Repeater> 

<asp:Repeater ID="sub_cat" runat="server"> 
     <ItemTemplate> 
      <ul> 
       <li>        
        <input runat="server" id="subcheck" type="checkbox" class="icheck" AutoPostBack="True" Text='<%# Eval("cat_name") %>' />          
       </li>   
      </ul> 
     </ItemTemplate> 
</asp:Repeater> 

list.aspx.cs

public void bring_cat() 
{ 
    DataSet dscat = conn.bringit("Select * from categories where sub_id=1"); 
    rptcat.DataSource = dscat.Tables[0].DefaultView; 
    rptcat.DataBind(); 
    subcheck.Visible = false; 
} 

protected void main_cat_CheckChanged(object sender, System.EventArgs e) 
{ 
    foreach (RepeaterItem aItem in rptcat.Items) 
    { 
     CheckBox main_cat = (CheckBox)aItem.FindControl("main_cat"); 
     var id = main_cat.Attributes["data-id"]; 
     if (main_cat.Checked == true) 
     { 
       DataSet ds_sub_cat = conn.bringit("Select * from categories where sub_id="+id); 
       sub_cat.DataSource = ds_sub_cat.Tables[0].DefaultView; 
       sub_cat.DataBind(); 
       sub_cat.Visible = true; 
       subcheck.Visible = true; 
      } 
      else 
      { 
       sub_cat.Visible = false; 
       subcheck.Visible = false; 
      } 
    } 
} 

当我点击主复选框,然后我得到的ID号码,并试图显示subcheckbox与这种关系。

你能看出什么是错?你有更好的主意去做吗?

好的,我解决了我的问题。我希望它对你有帮助。

如果您试图直接从复选框中获取身份证号码,那么您可能看不到完美的工作。解决方案很简单。在中继器或数据列表中的复选框后添加隐藏字段控件,并将value =“< #Eval(”cat_id“)”设置为id号。现在,您可以从代码后面获取身份证号码,而不会有任何计数问题。

我觉得有一点小虫,这就是为什么我们使用hiddenfield。这不是现在最好的方式,但我可以说它的工作。