获取索引行在jqGrid中单击

时间:2012-02-13 14:13:36

标签: jquery jqgrid jqgrid-asp.net jqgrid-formatter

我想要用户单击的行中的字段值。我写这段代码,但这段代码错了。

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行。

请帮助我。 谢谢所有

1 个答案:

答案 0 :(得分:2)

首先,您发布的代码包含许多小错误。所以它无法奏效。如果您修改了stackoverflow上发布的原始代码,请在修改中更加仔细。

例如:

  • colNames只包含两个元素,但colModel - 8个元素。因此,有人会收到有关数组长度不同的错误,而且代码不能正常工作;
  • 您可以两次定义datatype选项:一个值为'local',另一个值为'json';
  • 您应该使用逗号(',')代替分号(';')作为firstButtonColumnIndex = 0的结尾(请参阅第一行)。当前代码使用未定义的grid并将其解释为全局变量。

关于您的主要问题:

您使用“在jqGrid中点击获取索引行”作为问题的标题,但您在问题文本中写道,您 rowid始终为0而不是rowIndex < / em>的。要获取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;
}

您始终rowid为0的信息假设您在JSON中填写了错误的id,这些'jQGridHandler.ashx'生成了id下的服务器代码。 id必须在页面上包含唯一值。您可以使用开发人员工具检查行的<tr>属性(网格的{{1}}元素的ID)或使用FiddlerFirebug来捕获JSON,将从服务器返回。如果您在本地化错误时遇到问题,则应使用JSON数据附加问题。