控制ASP.NET中Gridview行内的复选框

时间:2009-10-05 09:52:07

标签: c# asp.net gridview

不确定如何处理这个问题但是这里......

我有一个gridview,每行有两个复选框,下面是项目模板的示例:

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

我希望ChildCheckbox的'enabled'属性由MasterCheckbox的'Checked'属性控制...换句话说,只有在检查了MasterCheckbox时才启用ChildCheckbox。

我知道我需要在MasterCheckbox控件上附加一个处理程序来调用一些javascript来在客户端执行必要的操作 - 这可能会在row_databound()方法中完成吗?

我无法弄清楚要使其工作所需的javascript,因此欢迎任何提示/提示。

由于

道尔顿

2 个答案:

答案 0 :(得分:2)

首先,您不需要回答自己的问题,可以在第一个问题中添加注释。

由于您使用的是GridView,我认为您正在为MasterCheckBox绑定一些东西, 所以我们假设它是dataTable中的布尔值。 例如,它是一个名为 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>

希望这有帮助。

答案 1 :(得分: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")); 
}

效率不高但工作正常。