不确定如何处理这个问题但是这里......
我有一个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,因此欢迎任何提示/提示。
由于
道尔顿
答案 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"));
}
效率不高但工作正常。