2013-12-13 54 views
0

在我的MVC應用程序中,我使用jqGrid在整個應用程序中顯示記錄。要加載網格,我遍歷從存儲過程中檢索的數據集對象以構建結構化對象列表。見下面我可以從DataTable直接綁定jqGrid源代碼,就像在asp數據網格控件中做的一樣

List<CustomerOrders> ResultRows = new List<CustomerOrders>(); 
     JQGridResult Result = new JQGridResult() 
     { 
      page = 1, 
      records = 0, 
      orders = new List<CustomerOrders>(), 
      total = 1 
     }; 
     DataSet SearchResult = DB.ExecuteDataset("ConnectionString", "pc_ADMDbdPOXOrderStatsDetails", 
           new SqlParameter("@AggregateFlag", 1), 
           new SqlParameter("@CustomerID", SessionManager.GetSession().CustomerID), 
           new SqlParameter("@QualifierType", QualifierType), 
           new SqlParameter("@FromDate", FromDate), 
           new SqlParameter("@ToDate", ToDate), 
           new SqlParameter("@RoleList", null),// remove SqlParameter; when SP is modified to remove this param. 
           new SqlParameter("@BranchList", BranchList == "" ? null : BranchList), 
           new SqlParameter("@Display", null)); 
     //Export to Excel 
     Common.SetSession(SearchResult, null, "POXOrderStatistics"); 

     DataRowCollection DataRows = SearchResult.Tables[0].Rows; 
     foreach (DataRow item in DataRows) 
     { 
      ResultRows.Add(new CustomerOrders() 
      { 
       CustomerID = Convert.ToInt32(item["CustomerID"]), 
       CompanyName = Convert.ToString(item["CompanyName"]), 
       ReadingCount = Convert.ToInt32(item["ReadingCount"]), 
       DateRange = string.Format("From: {0} To: {1}", FromDate, ToDate) 
      }); 
     } 
     Result.orders = ResultRows; 
     Result.records = ResultRows.Count; 
     return Json(Result, JsonRequestBehavior.AllowGet); 

現在我想要的代碼是不消除這種遍歷所有數據集&需要找出辦法讓我可以直接返回我的數據集/ DataTable對象的記錄源的jqGrid。與我們如何將DataSet對象綁定到asp網格控件有些相似。 如果有人已經做了這樣的實施,請幫我在這種代碼消除

回答

2

對不起,但我不明白你的問題。你寫到你想「直接返回myDataset/DataTable對象作爲jqGrid的記錄源​​」。 jqGrid是純粹的JavaScript解決方案實現爲jQuery插件。它在客戶端的網頁瀏覽器內部工作。如果使用數據類型:「json」,jqGrid可以從服務器獲取輸入數據。例如,它可以從ASP.NET MVC控制器的Action中獲取返回的數據。儘管如此,我們不能說「DataSet是jqGrid的直接來源」。 DataSet類的實例只能存在於C#代碼的「內部」服務器端。爲了在jqGrid中使用,數據應該首先被序列化爲JSON字符串,然後通過HTTP從服務器發送到客戶端。 Web瀏覽器應該將JSON字符串反序列化爲JavaScript對象,然後jqGrid可以使用JavaScript對象作爲網格的輸入。

如果你想優化你的代碼,我會建議你使用SqlCommandSqlDataReader代替DataSetResultRows。通過這種方式可以提高對數據庫訪問的性能。欲瞭解更多詳情,請參閱the answer,the source, the source,the source和許多其他。一般來說,如果您只需要從SQL Server讀取數據,那麼SqlCommandSqlDataReader是執行此操作的最快捷方式。該代碼是非常簡單,它可能是關於像下面

... 
var con = new SqlConnection(Settings.Default.DB); 
var cmd = new SqlCommand("dbo.pc_ADMDbdPOXOrderStatsDetails", con) { 
       CommandType = CommandType.StoredProcedure 
      }; 
cmd.Parameters.AddRange(new[] { 
    new SqlParameter("@AggregateFlag", SqlDbType.Bit) { Value = 1 }, 
    new SqlParameter("@CustomerID", SqlDbType.Int) { 
     Value = (int)SessionManager.GetSession().CustomerID 
    }, 
    ... 
}); 

con.Open(); 
SqlDataReader dr = cmd.ExecuteReader(); 
int CustomerID = dr.GetOrdinal("CustomerID"), 
    CompanyName = dr.GetOrdinal("CompanyName"), 
    ReadingCount = dr.GetOrdinal("ReadingCount"); 
var dateRange = string.Format("From: {0} To: {1}", FromDate, ToDate); 

var listOfOrders = new List<CustomerOrders>(); 
while (dr.Read()) { 
    listOfOrders.Add(new CustomerOrders() { 
     CustomerID = dr.GetInt32(CustomerID), 
     CompanyName = Convert.ToString(CompanyName), 
     ReadingCount = dr.GetInt32(ReadingCount), 
     DateRange = dateRange 
    }); 
} 

return Json(listOfOrders, JsonRequestBehavior.AllowGet); 

的行動將的CustomerOrders項目回報陣列可以通過閱讀的jqGrid。我想你使用loadonce: true,因爲你的代碼沒有服務器端數據分頁。

+0

嗨奧列格請你可以查看我的[這個](http://stackoverflow.com/questions/21191473/how-to-assign-option-string-containing-br-to-editions-value-attribute-of- jqgri)quetion並建議我解決它。這需要緊急解決。 – Shaggy

相關問題