Получить индексную строку, нажатую в jqGrid - PullRequest
0 голосов
/ 13 февраля 2012

Мне нужно значение поля в строке, по которому пользователь щелкнул.Я пишу этот код, но этот код неверен.

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 Ответ

2 голосов
/ 13 февраля 2012

Прежде всего, код, который вы разместили, содержит много мелких ошибок. Так что это не может работать. Если вы изменили свой исходный код для публикации в стеке, пожалуйста, будьте внимательнее при внесении изменений.

Например:

  • colNames содержит только два элемента, но colModel - 8 элементов. Таким образом, вы получаете ошибку о разной длине массивов, и код больше не работает;
  • Вы определяете опцию datatype дважды: один со значением 'local' и еще один раз со значением 'json';
  • Вы должны использовать запятую (',') вместо точки с запятой (';') в качестве конца firstButtonColumnIndex = 0 (см. Первую строку). Текущий код использует undefined grid и интерпретирует его как global variable.

На ваш главный вопрос:

В качестве заголовка вашего вопроса вы использовали «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, следует из предположения, что вы неправильно указали id в JSON, который выдает код сервера под 'jQGridHandler.ashx'. id должно иметь уникальных значений на странице. Вы можете использовать Инструменты разработчика, чтобы проверить атрибут id строк (идентификаторы <tr> элементов сетки) или использовать Fiddler из Firebug , чтобы поймать JSON, который будет возвращен с сервера. Если у вас возникнут проблемы с локализацией ошибки, вы должны добавить свой вопрос к данным JSON.

...