Я использую jqGrid 3.6.4 и jQuery 1.4.2. в моем образце я добираюсь после json формата данных, и я хочу отобразить эти json данные в строки jqgrid
{
"page": "1",
"total": 1,
"records": "6",
"rows": [
{
"head": {
"student_name": "Mr S. Jack ",
"year": 2007
},
"sub": [
{
"course_description": "Math ",
"date": "22-04-2010",
"number": 1,
"time_of_add": "2:00",
"day": "today"
}
]
}
]
}
мой код jqgrid следующие
jQuery("#"+subgrid_table_id).jqGrid({
url:"http://localhost/stud/beta/web/GetStud.php?sid="+sid,
dtatype: "json",
colNames: ['Stud Name','Year','Date'.'Number'],
colModel: [ {name:'Stud Name',index:'student_name', width:100, jsonmap:"student_name"},
{name:'Year',index:'year', width:100, jsonmap:"year"},
{name:'Date',index:'date', width:100, jsonmap:"date"},
{name:'Number',index:'number', width:100, jsonmap:"number"}
],
height:'100%',
jsonReader: { repeatitems : false, root:"head" },
});
Так же теперь проблема как мои данные т.е. student_name, и год находится под "головой", jqgrid, включают для определения местоположения этих двух полей. одновременно другие два значения столбцов т.е. Дата и Число находятся под "sub" и даже теми столбцами, которые я не смочь отобразить его с jqgrid
настолько любезно помогите мне как к расположенному эти атрибуты в JQGrid.
Спасибо
Прежде всего, в опубликованном коде есть некоторые ошибки, например dtatype: "json"
вместо datatype: "json"
. "},});
" вместо "}});
" в конце кода и colNames: ['Stud Name', 'Year', 'Date '.'Number']
вместо colNames: ['Stud Name', 'Year', 'Date', 'Number']
. После исправления этой явной ошибки вам необходимо изменить значения jsonmap
. Это был ваш главный вопрос. Исправленный код будет выглядеть следующим образом:
jQuery("#"+subgrid_table_id).jqGrid({
...
datatype: 'json',
colNames: ['Stud Name','Year','Date'.'Number'],
colModel: [
{name:'student_name', width:100, jsonmap:"head.student_name"},
{name:'year', width:100, jsonmap:"head.year"},
{name:'date', width:100, jsonmap:"sub.0.date"},
{name:'number', width:100, jsonmap:"sub.0.number"}
],
jsonReader: { repeatitems:false, root:"rows" }
});
Вы должны исправить root
на « rows
» и использовать jsonmap
в точечной нотации JSON (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_dot_notation ). Я использую немного странную запись вроде « sub.0.number
», потому что sub.0.number
в JavaScript совпадает с sub [0] .number
. Теперь это работает.
Я рекомендую вам еще раз подумать о структуре данных JSON, которые вы получаете.(см. мои предыдущие комментарии к вашему вопросу): действительно ли «вложенный» элемент является массивом, всегда состоящим из одного элемента, или вы хотите использовать вложенные сетки? Вероятно, данные следует изменить с sub: [{"": "", ...}]
на sub: {"": "", ...}
? Что вы хотите использовать в качестве rowid? имя_студента
? Затем добавьте id: "head.student_name"
в определение jsonReader
или добавьте свойство key: true
в определение столбца student_name
. Или вы забыли включить его в данные JSON?
И последнее предложение. Если вы откроете http://trirand.com/blog/jqgrid/jqgrid.html и откроете в левой части дерева ветку «Отображение данных» \ «Оптимизация данных», вы увидите пример, где на используйте только массив вместо именованных элементов в JSON. Такие данные будут иметь минимальный размер и их можно будет быстрее передавать от сервера к клиенту. Вместо этого у ваших данных есть некоторые поля (например, « course_description »), которые вы вообще не используете. Итак, , если вы можете внести какие-либо изменения в код сервера , попробуйте оптимизировать скорость передачи данных.