我有一个网格视图,其中有一个标题模板“全选”,选中后将选中网格视图行中的所有复选框。
我有一个页面大小下拉列表,选择时将打开该数量的 gridview 行。最初它设置为 10。
最初当 gridview 被加载并且当我选择全部时它选择了 10 个复选框,后来当我将页面大小更改为 50 并选择全部时,它仍然只选择 10 条记录。但是,它应该选择所有 50 条记录,而这并没有发生。
我在单击选择所有复选框时将数组变量传递给文字控件,该复选框将行数作为网格视图中的数字,但 JavaScript 中的函数仍保留 10 行的相同旧值,因此它选择 10 条记录。
我的代码:
protected void gvDeviceList_DataBound(object sender, EventArgs e){
try {
//repopulate the already ticked checkboxes
RePopulateCheckboxes(gvDeviceList);
if (gvDeviceList.Rows.Count > 0) {
CheckBox cbHeader = (CheckBox)(gvDeviceList.HeaderRow.FindControl("chbOptions"));
cbHeader.Attributes["onclick"] = "ChangeAllCheckBoxStates(this.checked);";
//ClientScript.RegisterArrayDeclaration("CheckBoxIDs", String.Concat("'", cbHeader.ClientID, "'"));
//Add the CheckBox's ID to the client-side CheckBoxIDs array
List<String> ArrayValues = new List<String>();
ArrayValues.Add(String.Concat("'", cbHeader.ClientID, "'"));
foreach (GridViewRow gvr in gvDeviceList.Rows) {
//Get a programmatic reference to the CheckBox control
CheckBox cb = (CheckBox)(gvr.FindControl("chbAction"));
//Add the CheckBox's ID to the client-side CheckBoxIDs array
//ClientScript.RegisterArrayDeclaration("CheckBoxIDs", String.Concat("'", cb.ClientID, "'"));
ArrayValues.Add(String.Concat("'", cb.ClientID, "'"));
}
//Output the array to the Literal control (CheckBoxIDsArray)
CheckBoxIDsArray.Text = "<script type='text/javascript'>" + "\r\n" +
"" + "\r\n" +
String.Concat("var CheckBoxIDs = new Array(", String.Join(",", ArrayValues.ToArray()), ");") + "\r\n" +
"" + "\r\n" +
"</script>";
}
文字控制是:
<asp:Literal ID="CheckBoxIDsArray" runat="server" Visible="True"></asp:Literal>
我的 JavaScript 代码是:
function ChangeAllCheckBoxStates(checkState) {
// Toggles through all of the checkboxes defined in the CheckBoxIDs array
// and updates their value to the checkState input parameter
if (CheckBoxIDs != null) {
for (var i = 0; i < CheckBoxIDs.length; i++)
ChangeCheckBoxState(CheckBoxIDs[i], checkState);
}
}
任何帮助将不胜感激。