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