2009-10-05 263 views
0
一個GridView行內

不是真的知道如何處理這個問題,但在這裏不用...控制複選框在ASP.NET

我有兩個複選框中每一列的gridview的,下面是該項目模板的示例:

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server"/> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" /> 
</ItemTemplate> 

我想ChildCheckbox的「啓用」屬性由MasterCheckbox的「選中」屬性...所以換句話說,當MasterCheckbox已檢查ChildCheckbox時,纔會啓用控制。

我知道我需要在MasterCheckbox控件上附加一個處理程序來調用一些JavaScript來在客戶端執行必要的操作 - 這可能會在row_databound()方法中完成?

我不能完全弄清楚所需的JavaScript,所以任何提示/技巧將受到歡迎。

感謝

達爾

回答

2

首先你不需要回答你自己的問題,你可以添加註釋到您的第一個問題。

由於您使用的是GridView,我認爲您是爲MasterCheckBox綁定東西的, 因此我們假設它是dataTable中的布爾值。 例如,它與名稱行contaning列IsMasterChecked

您可以處理啓用另一個具有約束力的自定義表達式作爲

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" /> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" Enabled='<%# Convert.ToBoolean(Eval("IsMasterChecked")) %>'/> 
</ItemTemplate> 

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" /> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" Enabled='<%# Convert.ToBoolean(Eval("IsMasterChecked")) ? "true" : "false" %>'/> 
</ItemTemplate> 

希望這有助於。

+0

謝謝瑪拉 - 這應該做到這一點......即使您添加評論,帖子是否會向頂端移動?助教。 – Dal 2009-10-06 13:01:31

+0

主要投票的帖子去頂:) – Myra 2009-10-06 13:13:24

0

關閉我的頭頂,我認爲你必須做的是沿着以下線的東西是什麼?

<asp:TemplateField HeaderText="Checkbox"> 
    <ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" AutoPostBack="true" OnCheckedChanged="checkGridViewChkBox" /> 
    </ItemTemplate> 
    </asp:TemplateField> 

隨着後面的下面的代碼。

CheckBox MasterCheckbox; 
CheckBox ChildCheckbox; 

private void checkGridViewChkBox() 
{ 
    int i; 
    int x = GridView1.Rows.Count; 

    for (i = 0; i < x; i++) //loop through rows 
    { 
     findControls(i); 

     if (MasterCheckbox.Checked) 
     { 
      ChildCheckbox.Enabled = true; 
     }else{  
     ChildCheckbox.Enabled = false;  
     }  
    } 

} 

private void findControls(int i) 
{                
    MasterCheckbox = (CheckBox)(GridView1.Rows[i].FindControl("MasterCheckbox")); 
    ChildCheckbox = (CheckBox)(GridView1.Rows[i].FindControl("ChildCheckbox")); 
} 

這不是非常有效,但工作正常。