2016-02-05 82 views
0

我試圖在複選框中使用複選框獲取兩個主類別,但我沒有問題,但是當我嘗試在同一個數據庫表上使用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與這種關係。

你能看出什麼是錯?你有更好的主意去做嗎?

回答

0

好的,我解決了我的問題。我希望它對你有幫助。

如果您試圖直接從複選框中獲取身份證號碼,那麼您可能看不到完美的工作。解決方案很簡單。在中繼器或數據列表中的複選框後添加隱藏字段控件,並將value =「< #Eval(」cat_id「)」設置爲id號。現在,您可以從代碼後面獲取身份證號碼,而不會有任何計數問題。

我覺得有一點小蟲,這就是爲什麼我們使用hiddenfield。這不是現在最好的方式,但我可以說它的工作。

相關問題