我将动态绑定到GridView控件的列表中。 网格视图控件位于包装在asp:UpdatePanel(Ajax)中的asp.net页面中。 第一列包含一个复选框控件。 此列中只能选中一个复选框。 如果用户选中一个复选框,则所有其他复选框都必须取消选中。带有复选框列的GridView。客户端脚本取消选中除当前复选框之外的所有内容
我想实现这个使用客户端脚本没有成功。 在GridView的RowDatabound事件的处理程序中,试图将属性添加到单元格中包含的CheckBox。
protected void ErrorGridView_RowDatabound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if(e.Row.Cells[0].HasControls())
{
foreach (var control in e.Row.Cells[0].Controls)
{
if (!(control is CheckBox)) continue;
var checkBox = (CheckBox)control;
checkBox.Attributes.Add("CheckedChanged", "errorCheckChanged");
return;
}
}
}
客户端脚本登记在Page_Load事件处理程序 - 如下:
如果(Page.ClientScript.IsClientScriptBlockRegistered( “ErrorsCheckBoxHandler”)!) Page.ClientScript.RegisterClientScriptBlock(的GetType (),“ErrorsCheckBoxHandler”,“function errorCheckChanged(){window.alert(\”here \“);}”);
问题是,当单击任何复选框时,函数不会被调用。希望有人能够阐明我在这里错过了什么?
另外,执行取消选中目标列中选中的任何其他复选框的最佳方式是什么?
我的计划是更改'errorCheckChanged'函数以获取一个参数(复选框对象)。我会改变上面的代码;添加到属性添加签名:
checkBox.Attributes.Add( “的CheckedChanged”, “errorCheckChanged(此)”);
希望,我会然后能够:
(1)判断是否该复选框状态“检查”。 (如果它是'检查',然后继续下面的步骤)
(2)找到复选框parent(=单元格),然后确定受影响的GridView行。
(3)遍历所有行,将复选框设置为“Checked = false”,但当前行除外。
这会被认为是正确的做法吗?
感谢
格兰特
伟大的东西Selva。继这个概念之后,除了我无法得到-getElementById('<%= myGridView.ClientID%>'),我必须硬编码值。帮助。 – 2010-06-30 20:16:54
这不允许多选复选框。如何启用多个检查? – rickyProgrammer 2015-06-16 09:57:58
@rickyProgrammer OP的要求是检查选中的“CheckBox”并取消其余的检查。如果你想多次检查,使用这个。 'function errorCheckChanged(){var _ gridView = document.getElementById('<%= GridView1.ClientID%>'); var Elements = gridView.getElementsByTagName('input');对于(var i = 0; i
2015-06-16 11:55:07