2010-04-22 20 views
7

Estoy usando jqGrid 3.6.4 y un jquery 1.4.2. En mi muestra que estoy recibiendo formato siguientes datos JSON & quiero asignar estos datos JSON en filas de una jqGridAsignación de datos JSON en 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" 
      } 
     ] 

     } 
] 
} 

mi código jqGrid es el siguiente

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" }, 
}); 

Así que ahora el problema es que mi datos, es decir, student_name y year están bajo "head", jqgrid está habilitado para ubicar estos dos campos. al mismo tiempo, otros dos valores de columna, es decir, Fecha y Número se encuentra debajo de "sub" e incluso esas columnas no puedo asignarlo con jqgrid

así que amablemente ayúdenme a ubicar estos atributos en JQGrid.

Gracias

+0

¿Podría explicar por qué el elemento "secundario" es una matriz? ¿Desea utilizar subgrids o puede cambiar los datos de entrada de sub: [{"": "", ...}] a sub: {"": "", ...}? Una pregunta más: ¿qué quieres usar como identificador de fila? ¿nombre del estudiante? ¿O se le olvidó incluir en los datos de JSON? – Oleg

+0

¿Puedes cambiar los datos JSON que envía el servidor o llamar a un servicio que no controlas? – Oleg

Respuesta

15

En primer lugar el código publicado tiene algunos errores como dtatype: "json" en lugar de datatype: "json". "},});" en lugar de "}});" al final del código y en lugar de colNames: ['Stud Name','Year','Date','Number']. Después de corregir estos errores claros, necesita cambiar los valores jsonmap. Esta fue tu pregunta principal. El código fijo será parecerse a lo siguiente:

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" } 
}); 

usted tiene que fijar a root "rows" y utilizar jsonmap en JSON notación de puntos (ver http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_dot_notation). Uso una notación extraña como "sub.0.number" porque sub.0.number en JavaScript es lo mismo que sub[0].number. Ahora funciona.

Te recomiendo que pienses más sobre la estructura de los datos JSON que recibes. (vea mis comentarios anteriores a su pregunta): ¿El elemento "sub" es realmente una matriz con siempre un elemento o si desea usar sub-cuadrículas? Probablemente los datos se deben cambiar de sub:[{"":"", ...}] a sub:{"":"", ...}? ¿Qué quieres usar como rowid? student_name? A continuación, agregue id: "head.student_name" a la definición jsonReader o agregue la propiedad key: true a la definición de la columna student_name. ¿O te olvidas de incluirlo en los datos de JSON?

Y la última sugerencia. Si abre http://trirand.com/blog/jqgrid/jqgrid.html y abre en el lado izquierdo del árbol la bifurcación "Asignación de datos" \ "Optimización de datos", verá un ejemplo donde solo se usa una matriz en lugar de elementos con nombre en JSON. Dichos datos tendrán un tamaño mínimo y se pueden transferir más rápidamente de un servidor a otro. Sus datos en cambio tienen algunos campos (como "course_description") que no usa en absoluto. Por lo tanto, si puede realizar cambios en el código del servidor intente optimizar la velocidad de transferencia de datos.