2015-01-12 8 views
0

В моем коде mvc я преобразовываю datatable в json.
Результат моего json в правильном формате, но он не заполняет мой jqgrid. РезультатОшибка привязки json jqGrid

JSON:

"{\"total\":2,\"page\":1,\"records\":2,\"rows\":[{\"id\":1,\"cell\":[\"1\",\"TEST 
ACCOUNT\",\"TEST LOB\",\"TEST REPORT\"]}]}" 

Код:

public string JsonForJqgrid(DataTable dt, int pageSize, int totalRecords, int page) 
    { 
     int totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 
     StringBuilder jsonBuilder = new StringBuilder(); 
     jsonBuilder.Append("{"); 
     jsonBuilder.Append("\"total\":" + totalPages + ",\"page\":" + page + ",\"records\":" + (totalRecords) + ",\"rows\""); 
     jsonBuilder.Append(":["); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      jsonBuilder.Append("{\"id\":" + (i+1) + ",\"cell\":["); 
      for (int j = 0; j < dt.Columns.Count; j++) 
      { 
       jsonBuilder.Append("\""); 
       jsonBuilder.Append(dt.Rows[i][j].ToString()); 
       jsonBuilder.Append("\","); 
      } 
      jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 
      jsonBuilder.Append("]},"); 
     } 
     jsonBuilder.Remove(jsonBuilder.Length - 1, 1); 
     jsonBuilder.Append("]"); 
     jsonBuilder.Append("}"); 
     return jsonBuilder.ToString(); 
    } 

jqGrid: Действие

$("#jqTable").jqGrid({ 
     // Ajax related configurations 
     url: "Staffing/LOBStaffing", 
     datatype: "json", 
     mtype: "GET", 
     // Specify the column names 
     colNames: ["ID", "Account", "Lob", "Report"], 

     // Configure the columns 
     colModel: [ 
      { name: "ID", index: "ID", width: 40, align: "center", key: true, hidden: true }, 
      { name: "Account", width: 150, align: "center" }, 
      { name: "Lob", width: 150, align: "center" }, 
      { name: "Report", width: 150, align: "center" } 
     ], 
     rowNum: 10, 
     loadonce: true, 
     viewrecords: true, 
     sortorder: "desc", 
     caption: "List Staffing Details" 
     //gridview: true, 
     //scrollOffset: 0 
    }); 

Контроллер:

[HttpGet] 
    public JsonResult LOBStaffing() 
    { 
     string sJson = _staffing.JsonForJqgrid(_staffing.GetStaffing(), 1, 2, 1); 

     return Json(sJson, JsonRequestBehavior.AllowGet); 
    } 
+0

Лучше передать и обработать метод 'Json()' контроллера. я предполагаю, что вы получите строку json в своей сетке. –

+0

Я фактически работаю над динамическими данными. любые предложения по некоторым работам при работе с динамическими данными? – JVELASCO

+0

помогает ли мой ответ? –

ответ

1

Один из способов, которые я использую в проектах для заполнения данных для этого класса:

public class Row 
{ 
    public string id { get; set; } 
    public List<string> cell { get; set; } 

    public Row() 
    { 
     cell = new List<string>(); 
    } 
} 

public class JqgridData 
{ 
    public int page { get; set; } 
    public int total { get; set; } 
    public int records { get; set; } 
    public List<Row> rows { get; set; } 

    public JqgridData() 
    { 
     rows = new List<Row>(); 
    } 
} 

Ваш метод JsonForJqgrid должен возвращать JqgridData структуру позволяет хранить динамические данные, becouse вы можете добавить столько строк в как хотите. Json() метод в контроллере сериализует этот класс вправо для jqgrid.

Если вам нужно хранить не только строки, но DataTime, Decimal и т.д. Types вы можете попробовать использовать dynamic типа в public List<string> cell собственности. Но я не проверял, как это работает.

Смежные вопросы