1

1つのヘッダーテンプレート「すべて選択」があり、チェックするとグリッドビュー行のすべてのチェックボックスが選択されるグリッドビューがあります。

ページサイズのドロップダウンがあり、選択するとその数のグリッドビュー行が開きます。最初は10に設定されています。

最初にグリッドビューがロードされ、すべてを選択すると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);
    }
}

どんな助けでもありがたいです。

4

0 に答える 0