我将一个键入的列表动态绑定到GridView控件。 Grid View Control位于一个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对象)。我会改变上面的代码;添加到属性添加签名:
checkBox.Attributes.Add(“CheckedChanged”,“errorCheckChanged( this )”);
希望我能够:
(1)确定复选框状态是否为“已检查”。 (如果'已'检查',则继续执行以下步骤)
(2)找到复选框parent(= cell),然后确定受影响的GridView Row
(3)循环遍历所有行,将复选框设置为'Checked = false',当前行除外。
这会被认为是正确的做法吗?
谢谢
捐赠
答案 0 :(得分:1)
您还可以在设计时添加onclick
checkbox
事件<Columns>
。
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" onclick="errorCheckChanged(this)" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
JavaScript
function errorCheckChanged(chkBox){
var gridView = document.getElementById('<% =GridView1.ClientID %>');
var Elements = gridView.getElementsByTagName('input');
for(var i = 0; i < Elements.length; i++){
if(Elements[i].type == 'checkbox' && Elements[i].id != chkBox.id && chkBox.checked)
Elements[i].checked = false;
}
}
看起来像
{{1}}
答案 1 :(得分:0)
使用onclick
属性而不是CheckChanged
。我认为这不是一个有效的js事件。所以
checkBox.Attributes.Add("onclick", "errorCheckChanged(this);");
获取您可以执行的复选框列表
JS:
var grid = document.getElementById('<% =GridView1.ClientID %>');
var checks = grid.getElementsByTagName('input');
您必须检查type
属性以确保它是一个复选框,或者您可以为所有复选框指定一个特定的类以对其进行逻辑分组。无论如何,您可以在列表中检查click
ed元素ID。