(jqGrid) Ошибка при поиске номера строки, по которой щелкнули

1
function drawTable(url){
        $('#reportList').jqGrid('GridUnload');

        $('#reportList').jqGrid({
            url: url,
            mtype: 'GET',
            datatype: 'json',


            colNames:['num','section1','section_detail','product','product_description','status','rate','start_date','end_date','issue','in_charge','write_date','view'],
            colModel:[
                {name:'num', index:'num', hidden:true},
                {name:'section1', index:'section1',  width:60},
                {name:'section2', index:'section2'},
                {name:'product', index:'product', width:90},
                {name:'product_description', index:'product_description'},
                {name:'status', index:'status', width:50},
                {name:'rate', index:'rate', width:50},
                {name:'start_date', width:90, index:'start_date'},
                {name:'completion_date', width:90, index:'completion_date'},
                {name:'issues', index:'issues'},
                {name:'in_charge', index:'in_charge', width:80},

                {name:'writedate', index:'writedate',width:90},
                {name:'rewrite', index:'rewrite', width:60, formatter: function addButton(cellvalue, options, rowobject){


                return "<input class='btnEdit' type='button' value='view' onClick='editReport.call(this)'/>" 

                }}
            ],

            pager: '#pager',
            sortname: 'section1',
            sortorder: 'DESC',
            multiselect: false,
            rownumbers: true,
            rowNum:50,
            loadonce: true,
            multiselect:true,
            gridComplete: function(){


            }

        });

    }

    function editReport(){

        //get row number
        var clickedRow = $(this).closest("tr.jqgrow").attr("id");

        var ids = jQuery('#reportList').jqGrid('getDataIDs');

        // get row object with row num
        var rowId=ids[clickedRow-1];
        var rowData = jQuery('#reportList').jqGrid('getRowData', rowId);

        getReportInfo(rowData.num)
  }

Привет, Я делаю простую программу отчетов с Spring framework. Чтобы показать все зарегистрированные отчеты, я применил jqGrid (это таблица из тринадцати столбцов) для лучшего пользовательского интерфейса. все столбцы, кроме 'num' и 'view', показывают детали отчета. column 'num' - это скрытая информация для извлечения всей другой информации из базы данных. самый правый столбец ("вид") - это кнопка для просмотра подробностей отчета в дочернем окне.
В функции "editReport" я получаю "num" отчета, находя номер щелкнутого номера строки.

Я отлично выглядел. Однако, когда я устанавливаю 15 строк на страницу и меняю их на страницу 2, переменная 'clickedRow' генерирует неправильный номер. При нажатии первой строки на странице 2, я ожидаю 1, но он возвращает 16. Таким образом, он не может получить "num" из щелчка строки и генерировать ошибку.

  • 0
    Код editReport неверен. Значение $(this).closest("tr.jqgrow").attr("id") не является индексом строки . Это rowid по определению. Вам не нужно использовать getDataIDs вообще. Вместо этого вы можете использовать var rowId = $(this).closest("tr.jqgrow").attr("id"); а затем использует значение как параметр в getRowData или любой другой метод.
Теги:
jqgrid

1 ответ

2
Лучший ответ

Код editReport неверен. Значение $(this).closest("tr.jqgrow").attr("id") не является индексом строки. Это по- разному. Вам вообще не нужно использовать getDataIDs. Вместо этого вы можете использовать var rowId = $(this).closest("tr.jqgrow").attr("id"); а затем использует значение как параметр в getRowData или любой другой метод.

Кроме того, если столбец num содержит уникальное значение (значения разные во всех строках), вы можете добавить свойство key: true в определении столбца столбца num в colModel. Он будет информировать jqGrid использовать значения из столбца как rowid (значение атрибута id для элементов <tr>). Еще один способ - добавить jsonReader: { id: "num" }, но чтобы убедиться, что этот способ работает, вы должны включить пример ответа JSON от url (по крайней мере, одну строку или данные JSON). Кроме того, важно знать, какую версию jqGrid вы используете и с какой форвард jqGrid (бесплатный jqGrid, коммерческий Guriddo jqGrid JS или старый jqGrid в версии <= 4.7).

  • 0
    Спасибо!!! Это то, что я искал. Я добавил 'key: true' в столбец 'num', и все работает нормально!
  • 0
    @heesu: Добро пожаловать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню