【问题标题】:Get Index Row Clicked in jqGrid获取在 jqGrid 中单击的索引行
【发布时间】:2012-02-13 14:13:35
【问题描述】:

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

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

请帮助我。 谢谢大家

【问题讨论】:

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


    【解决方案1】:

    首先,您发布的代码包含许多小错误。所以它不能工作。如果您修改了您在stackoverflow上发布的原始代码,请在修改时更加小心。

    例如:

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

    你的主要问题:

    您使用“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;
    }
    

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

    【讨论】:

    • 感谢您的帮助,但在此 Jqgrid 搜索中不起作用。我不知道为什么,请帮助我。谢谢
    • @mohsen:不客气!关于您现有的问题,您应该更准确地指定问题。如果您使用datatype: 'json',则服务器 负责数据的过滤(搜索)。服务器接收filters 参数(格式见here)。所以服务器应该分析filters参数并实现搜索。
    • :对不起,是在服务端搜索,还是在客户端搜索????我得到了所有的捷克语,一切都很好。不知道怎么解决。
    • @mohsen:如果你使用datatype: 'json'服务器端负责分页、排序和过滤。服务器根据filters 参数将SELECT 的WHERE 部分构造到数据库。如果您确实希望客户端实现分页和过滤,服务器应该返回独立于rowspage输入参数值的整个数据。您应该将 loadonce: true 添加到 jqGrid 并在定义 sorttype 列选项时小心。如果您没有定义任何 sorttype 属性,网格会将数据解释为“文本”。
    • 我想在客户端实现搜索。
    猜你喜欢
    • 2010-10-02
    • 2012-05-08
    • 2018-09-16
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2019-05-25
    相关资源
    最近更新 更多