我有一个GridView,每行包含一个复选框,该列的标题是一个带checkAll功能的复选框:
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<input id="chkAll" onclick="javascript:SelectAllCheckboxes(this);" runat="server" type="checkbox" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" ToolTip="Select this order" AutoPostBack="true" OnCheckedChanged="chkSelect_OnCheckedChanged"/>
</ItemTemplate>
</asp:TemplateField>
...More BoundFields
</Columns>
SelectAllCheckboxes()
背后的javascriptfunction SelectAllCheckboxes(spanChk) {
// Added as ASPX uses SPAN for checkbox
var oItem = spanChk.children;
var theBox = (spanChk.type == "checkbox") ?
spanChk : spanChk.children.item[0];
xState = theBox.checked;
elm = theBox.form.elements;
for (i = 0; i < elm.length; i++)
if (elm[i].type == "checkbox" &&
elm[i].id != theBox.id) {
//elm[i].click();
if (elm[i].checked != xState)
elm[i].click();
//elm[i].checked=xState;
}
}
我的GridView基本上包含来自我网站的销售(订单),所以美元金额。 OnCheckedChanged事件添加(如果选中)或从页面上显示的totalAmount中减去当前行的价格(如果未选中)。 这一切都很有效,除了当我单击checkAll复选框时,所有行复选框的所有OnCheckedChanged事件都会触发,并且需要很长时间来处理它。因为我在OnCheckedChanged方法中所做的就是总和金额,有没有办法让我不能为各个复选框调用事件,只需调用一个单独的方法来获取所有GridView行并将它们全部加在一起一次?
答案 0 :(得分:1)
如果你考虑在一个回发中在服务器上完成所有操作,你可以试试这个:
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" ToolTip="Select this order" AutoPostBack="true" OnCheckedChanged="chkAll_OnCheckedChanged"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" ToolTip="Select this order" AutoPostBack="true" OnCheckedChanged="chkSelect_OnCheckedChanged"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
关于背后的代码:
protected void chkSelect_OnCheckedChanged(object sender, EventArgs e)
{
//Process checked item
}
protected void chkAll_OnCheckedChanged(object sender, EventArgs e)
{
foreach (GridViewRow item in grdTest.Rows)
{
CheckBox ckb = (CheckBox)item.FindControl("chkSelect");
//This will not call the individual event
ckb.Checked = ((CheckBox)sender).Checked;
//Process checked item
}
}