Я использую jqGrid версии 4.6.0Предотвращение ROWIDs от сброса по сортировке, пейджинг или удаление строк
Мой вопрос такой же, как This Question.
Решение, принятое там, должно использовать первичный ключ, но у меня нет первичного ключа для моих строк. Есть ли способ заставить jqgrid иметь уникальные идентификаторы строк при сортировке, изменении страниц или удалении строк?
Проблема у меня есть, если я удаляю строку say 2 из сеток с 5 строками, rowid для 3 устанавливается в 2, row4 - 3 ... и т. Д. Я хочу, чтобы мои строки были уникальными идентификаторами, и я хочу, чтобы они были сгенерированы на стороне клиента.
Для получения дополнительной информации: Моя сетка выгружается и сортируется на стороне клиента.
Вот ссылка JsFiddle на пример данных моей сетки.
testRow = function()
{
var row2correct = $("#list").jqGrid('getRowData', 2);// {meterid:2, DocGroupName: "name2", DocList: "list2", Mandatory: "No"};
var row6wong = $("#list").jqGrid('getRowData', 6);// is empty but i was expecting {meterid:4, DocGroupName: "name6", DocList: "ggg", Mandatory: "Yes"}
}
var mydata = [
{meterid:1 , metername: "name1", DocList: "list1", Mandatory: "Yes"},
{meterid:2, metername: "name2", DocList: "list2", Mandatory: "No"},
{meterid:1, metername: "name3", DocList: "list3", Mandatory: "No"},
{meterid:3, metername: "name4", DocList: "list4", Mandatory: "Yes"},
{meterid:4, metername: "name5", DocList: "list5", Mandatory: "Yes"},
{meterid:4, metername: "name6", DocList: "ggg", Mandatory: "Yes"},
];
$("#list").jqGrid({
datatype: "local",
data: mydata,
height: "auto",
colNames: ['Meterid', 'metername','Document Name','No of Mandatory'],
colModel :[
{name:'meterid', index:'meterid', width:55},
{name:'metername', index:'metername', width:90},
{name:'DocList', index:'DocList', width:90, editable: true }, {name:'Mandatory', index:'Mandatory', width:90, editable: true}
],
pager: '#pager',
rowNum:4,
rowList:[4,8,30],
sortorder: 'asc',
viewrecords: true,
gridview: true
});
Типичная причина вашей проблемы: вы ** заполнили ** данные неверным образом, не указав уникальный идентификатор каждого элемента входных данных. Вы должны добавить текст своего вопроса с примером данных, которые вы используете для заполнения сетки (достаточно 2-3 строк) и кода JavaScript, который вы используете для создания jqGrid. Кроме того, важно знать, какую версию jqGrid вы используете и из какой вики jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), коммерческий [Guriddo jqGrid JS] (http: // guriddo .net /? page_id = 103334) или старый jqGrid в версии <= 4.7) – Oleg
@Oleg Я только что редактировал свой вопрос со ссылкой на jsfiddle и пример кода. Причина, по которой у меня нет первичного ключа, состоит в том, что ключ моих строк - это составной ключ, поэтому я не могу установить ключ: true в любом из столбцов. Имейте в виду, что это образец, который я создал для этого вопроса, мой реальный настолько сложный, и данные создаются в mvc. –
Каждая строка jqGrid ** должна иметь уникальный атрибут id (см. [Рисунок] (https://free-jqgrid.github.io/getting-started/index.html#grid-internal)). ** Какой ** составной ключ уникален в данных? Почему вы используете 'index: 'id'' для столбца с именем:' meterid''? Вы можете создать свойство 'id' для каждого элемента входных данных. Текущие входные данные не так хороши, потому что все остальные свойства с исключением 'meterid' ** редактируются **. Очень плохо иметь редактируемый идентификатор. Вы используете 'datatype: 'xml'' в своей оригинальной демонстрации? У вас есть собственные данные XML или вы сериализуете данные как XML вместо JSON? – Oleg