0

ユーザーがクリックした行のフィールドの値が必要です。i このコードを書きますが、このコードは間違っています。

var firstButtonColumnIndex = 0;
    grid = $('#list'), firstButtonColumnIndex, buttonNames = {};

grid.jqGrid({
    url: 'jQGridHandler.ashx',
    datatype: 'local',
    direction: "rtl",
    datatype: 'json',
    height: 250,
    colNames: ['', ''],
    colModel: [
        { name: 'WorkOrderNo', width: 100, sortable: true },
        { name: 'AssetNo', width: 150, sortable: true },
        { name: 'WorkDescription', width: 400, sortable: true },
        { name: 'WorkOrderDate', width: 100, sortable: true },
        { name: 'WorkOrderTime', width: 100, sortable: true },
        { name: 'Remark', width: 260, sortable: true },
        { name: 'del', width: 20, sortable: false, search: false,
            formatter: function () {
                return "<span class='ui-icon ui-icon-trash'></span>"
            }
        },
        { name: 'details', width: 20, sortable: false, search: false,
            formatter: function () {
                return "<span class='ui-icon ui-icon-document'></span>"
            }
        }
    ],
    gridview: true,
    rowNum: 10,
    rowList: [10, 20, 30],
    pager: '#pager',
    //  sortname: 'WorkOrderNo',
    viewrecords: true,
    sortorder: 'asc',
    rownumbers: true,
    beforeSelectRow: function (rowid, e) {
        var iCol = $.jgrid.getCellIndex(e.target);
        if (iCol >= 7) {
            alert("rowid=" + rowid + "\nButton name: " + buttonNames[iCol]);
        }
        // prevent row selection if one click on the button
        return (iCol >= firstButtonColumnIndex) ? false : true;
    }
});

buttonNames[7] = 'Remove';
buttonNames[8] = 'Details';
grid.jqGrid('navGrid', '#pager', { add: false, edit: false, del: false }, {}, {},
    {}, { multipleSearch: true, overlay: false, width: 460 });

しかし、beforeSelectRowイベントではrowid常に0です。戻りWorkOrderNo行をクリックしたいです。

助けてください。皆さんありがとう

4

1 に答える 1

2

まず、あなたが投稿したコードには多くの小さなエラーが含まれています。だからうまくいかない。stackoverflow に投稿するために元のコードを変更する場合は、より慎重に変更してください。

例えば:

  • colNamesには 2 つの要素しか含まれていませんが、colModel- 8 つの要素が含まれています。そのため、配列の長さが異なるというエラーが発生し、コードが機能しなくなります。
  • datatypeoption を 2 回定義します。1 つは value'local'で、もう 1 回は value で定義します'json'
  • 末尾には、セミコロン (';') ではなくコンマ (',') を使用する必要があります (firstButtonColumnIndex = 0最初の行を参照)。現在のコードは undefined を使用し、それをグローバル変数gridとして解釈します。

あなたの主な質問に:

質問のタイトルとして「Get Index Row Clicked in jqGrid」を使用しましたが、質問のテキストに、rowid常に 0 ではなくrowIndex. rowIndexを取得するには、コードをbeforeSelectRow次のように変更します。

beforeSelectRow: function (rowid, e) {
    var iCol = $.jgrid.getCellIndex(e.target);
    if (iCol >= 7) {
        alert("rowid=" + rowid +
              "\nrowIndex=" + $(e.target).closest("tr.jqgrow")[0].rowIndex +
              "\nButton name: " + buttonNames[iCol]);
    }
    // prevent row selection if one click on the button
    return (iCol >= firstButtonColumnIndex) ? false : true;
}

常に 0 として持っている情報は、サーバー コードを生成する JSON にrowid間違って入力したという仮定に基づいています。ページ全体で一意の値を持つ必要があります。開発者ツールを使用して、行の属性 (グリッドの要素の ID)を調べたり、 FirebugのFiddlerを使用して、サーバーから返される JSON をキャッチしたりできます。エラーをローカライズするのに問題がある場合は、質問に JSON データを追加する必要があります。id'jQGridHandler.ashx'idid<tr>

于 2012-02-13T17:06:31.177 に答える