【发布时间】:2010-06-29 21:18:23
【问题描述】:
我正在将类型化列表动态绑定到 GridView 控件。 网格视图控件位于一个 asp.net 页面中,该页面包装在一个 asp:UpdatePanel (Ajax) 中。 第一列包含一个复选框控件。 此列中只能选中一个复选框。 如果用户选中一个复选框,则必须取消选中所有其他复选框。
我正在尝试使用客户端脚本来实现这一点,但没有成功。 在 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 事件处理程序上注册 - 如下:
if (!Page.ClientScript.IsClientScriptBlockRegistered("ErrorsCheckBoxHandler")) Page.ClientScript.RegisterClientScriptBlock(GetType(),"ErrorsCheckBoxHandler", "function errorCheckChanged() {window.alert(\"here\"); }");
问题是当任何复选框被点击时该函数没有被调用。希望有人可以阐明我在这里缺少什么?
此外,取消选择目标列中选中的任何其他复选框的最佳方法是什么?
我的计划是将“errorCheckChanged”函数更改为采用一个参数(复选框对象)。我会更改上面的代码;添加到属性添加签名:
checkBox.Attributes.Add("CheckedChanged", "errorCheckChanged(this)");
希望我能够:
(1) 判断复选框状态是否为'checked'。 (如果已“选中”,则继续执行以下步骤)
(2)找到checkbox parent(=cell),然后确定受影响的GridView Row。
(3) 遍历所有行,将复选框设置为“Checked=false”,当前行除外。
这会被认为是正确的方法吗?
谢谢
授予
【问题讨论】:
标签: asp.net javascript asp.net-ajax