2016-02-12 49 views
0

JQGrid工作正常,对于记录高达3000,所以与托尼:真,而它涉及到超过3200它显示空网格。我想利用服务器端分页和loadonce:false。有没有更好的方法来加载数据loadonce:true并显示一些大量的数据,如20k记录?如果我们要使用服务器端分页,我们应该只从数据库中提取特定数量的记录?请在下面找到我的代码,并指出我是否有任何问题。JQGrid显示空的同时处理超过3200条记录与MVC 4

型号:

public class GOALogging 
{ 
    public int SERV_TRANS_ID { get; set; } 
    public string ACT_YEAR { get; set; } 
    public string SEAS { get; set; } 
    public string RESPONSE_DT { get; set; } 
} 

控制器

public ActionResult Index() 
    { 
     return View(); 
    } 

public JsonResult getRecords() 
    { 
     List<GOALogging> items = new List<GOALogging>(); 
     items = GetLoggingDetails(); 
     var a = Json(items, JsonRequestBehavior.AllowGet); 
     return a; 
    } 

public List<GOALogging> GetLoggingDetails() 
    { 
     string connString = ConfigurationManager.ConnectionStrings["ACTOLConnection"].ConnectionString; 
     SqlConnection conn = new SqlConnection(connString); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandTimeout = 6000; 
     cmd.CommandText = "GET_SAMPLEDETAILS"; 
     cmd.Connection = conn; 
     conn.Open(); 
     DataTable dataTable = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dataTable); 
     conn.Close(); 
     da.Dispose(); 

     List<GOALogging> items = new List<GOALogging>(); 
     foreach (DataRow row in dataTable.Rows) 
     { 
      items.Add(new GOALogging 
      { 
       SERV_TRANS_ID = Convert.ToInt32(row["SERV_TRANS_ID"]), 
       ACT_YEAR = row["ACT_YEAR"].ToString(), 
       SEAS = row["SEAS"].ToString(), 
       RESPONSE_DT = row["RESPONSE_DT"].ToString() 
      }); 
     } 
     return items; 
    } 

查看

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title>Index</title> 
<script src="~/Scripts/grid.locale-en.js"></script> 
<script src="~/Scripts/jquery-1.11.0.min.js"></script> 
<link href="~/Scripts/lib-UI-jquery-css-custom-theme-jquery-ui-1.9.2.custom.css" rel="stylesheet" /> 
<script src="~/Scripts/jquery.jqGrid.js"></script> 
<script src="~/Scripts/grid.locale-en.js"></script> 
<link href="~/Scripts/ui.jqgrid.css" rel="stylesheet" /> 
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/base/jquery-ui.css" rel="stylesheet" /> 
</head> 
<body> 
<script type="text/javascript"> 
    $(function() { 
     $("#myGrid").jqGrid({ 
      url: '/GOA/getRecords', 
      datatype: 'json', 
      myType: 'GET', 
      colNames: ['ID', 
       'YEAR', 'SEASON', 'RESPONSE_DT'], 
      colModel: [ 
      { name: 'SERV_TRANS_ID' }, 
      { name: 'ACT_YEAR' }, 
      { name: 'SEAS' }, 
      { name: 'RESPONSE_DT' } 
      ], 
      pager: $('#myPager'), 
      jsonReader: { cell: ""}, 
      rowNum: 10, 
      sortname: 'SERV_TRANS_ID', 
      sortorder: 'desc', 
      gridview: true, 
      loadonce: true, 
      rowList: [10, 20, 50, 100], 
      width:1120, 
      height:280, 
      viewrecords: true, 
      caption: 'Past 24 hours ACTService Processing Status' 
     }); 
    }); 
</script> 
<div > 
    <table id="myGrid" ></table> 

    <div id="myPager"></div> 
</div> 
</body> 
</html> 

回答

1

这是因为.Net中的最大长度限制,您可以在控制器中使用下面的格式化代码来解决问题。

 List<MEmployee> items = new List<MEmployee>(); 
     items = getData(); 
     var a = Json(items, JsonRequestBehavior.AllowGet); 
     a.MaxJsonLength = int.MaxValue; 
     return a; 

Reference link

0

我怀疑你有序列化数据的大小有些问题。我的意思是你有纯粹的ASP.NET MVC问题。旧版本的ASP.NET MVC使用非常旧的JavaScriptSerializer进行序列化,它具有herehere的限制。

我建议您使用Newtonsoft.Json而不是JavaScriptSerializer。如果你想迁移到MVC5,那么它会自动。 Newtonsoft.Json的工作速度比JavaScriptSerializer快得多,并且没有这样的限制。

Here您可以下载使用简单的ASP.NET MVC编辑数据的演示项目。它使用原因Newtonsoft.Json

建议另外使用压缩返回的JSON数据。例如,看看here