1

グリッドのロード時に Rad グリッド クライアント側イベントを使用します。

<ClientSettings>
     <Selecting AllowRowSelect="false" />
          <ClientEvents OnGridCreated="GridCreated"  />
</ClientSettings>

チェックされたチェックボックスを、テーブルの主キーであるグリッドの最初の列の ID を含む配列に格納しています。

チェックボックスは

<ItemTemplate>
   <asp:CheckBox ID="chkSelectRow" runat="server" ClientIDMode="Static"></asp:CheckBox>
</ItemTemplate>

OnClick Evnet は、このように Item Databound イベントにバインドされます。

chkSelectRow.Attributes.Add("onclick", "RowCheckChanged('" + index +","+chkSelectRow.Checked+"');");

このための私のjscript

<script type="text/jscript">
//Enpty array for storing the selected rows of grid.
var selected = {};

//On grid row checked changed
function RowCheckChanged(sender) {
    var args = sender.split(",");
    var currentRowIndex = args[0];
    var checkedStatus = args[1];
    var gridCaseInfo = $find("<%=grdCaseInfo.ClientID %>");
    var currentrow = gridCaseInfo.get_masterTableView().get_dataItems()[currentRowIndex];
    RowSelectionChanged(gridCaseInfo, currentrow)
}

//On grid row selection changed
function RowSelectionChanged(sender, args) {
    var CaseInfoKey = args.getDataKeyValue("CaseInfoID");
    if (args.findElement("chkSelectRow").checked) {
        selected[CaseInfoKey] = true;
    }
    else {
        selected[CaseInfoKey] = false;
    }
}

function GridCreated(sender, eventArgs) {
    debugger;
    var masterTable = sender.get_masterTableView();
//traverse stored id's
    $jQuery.each(selected, function (i) {
//traverse gridrows for id's
        $jQuery.each(masterTable.get_dataItems(), function (j) {
// if it maches then make checkbox selected.
            if ((masterTable.get_dataItems()[j].getDataKeyValue("CaseInfoID") == i)) {
                var currentrow = masterTable.get_dataItems()[j];
                currentrow.findElement("chkSelectRow").checked = true;
                return false;
            }
        });
    });
}

理由はわかりませんが、選択した配列にエントリがある場合、最初のチェックボックスがチェックされます。

4

2 に答える 2