2016-03-09 158 views
0

我有一個控制器,它通過Viewbag返回一個強類型視圖和一個動態sql過程數據表的結果。我試圖在我的視圖中將網格綁定到Viewbag數據,但我無法弄清楚如何這樣做。kendo ui grid for mvc從viewbag中讀取

@(Html.Kendo().Grid(ViewBag.Rev) 
    .Name("RevGrid") 
    .Pageable() 
    .Sortable() 
    .Filterable() 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .PageSize(20) 
     .ServerOperation(false) 

    )) 



public ActionResult Index() 
    { 
     using (DataContext db = new DataContext()) 
     { 
      var spring = db.SpringTrainings.ToList(); 
      ViewData["Rev"] = Revenue(); 
      return View(spring); 
     } 
    } 

這就是數據表來自:

public DataTable Revenue() 
    { 
     using (var conn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)) 
     { 
      using (var commandproc = conn.CreateCommand()) 
      { 
       commandproc.CommandType = System.Data.CommandType.StoredProcedure; 
       commandproc.CommandText = "stTicketRevenue"; 
       conn.Open(); 
       { 
        var dataTable = new DataTable(); 
        var dataReader = commandproc.ExecuteReader(); 
        dataTable.Load(dataReader); 
        ViewBag.Proc = dataTable; 
        conn.Close(); 
        return dataTable; 
       } 


      } 
     } 

    } 

我真的很感激一些幫助與此有關。我甚至不確定這是從控制器傳遞數據表的正確方法。

回答

0
@(Html.Kendo().Grid(ViewBag.Rev as System.Data.DataTable) 
.Name("RevGrid") 
.Pageable() 
.Sortable() 
.Filterable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(20) 
    .ServerOperation(false) 

)) 

(OR)

@(Html.Kendo().Grid(ViewData["Rev"] as System.Data.DataTable) 
.Name("RevGrid") 
.Pageable() 
.Sortable() 
.Filterable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(20) 
    .ServerOperation(false) 

)) 

它會給錯誤,如果你不投的ViewBag或ViewData的要麼數據表或列表。錯誤 - >無法使用lambda表達式作爲參數傳遞給動態調度操作,而不首先將其強制轉換爲

而是使用ViewBag或ViewData的委託或表達式樹類型,使用劍道讀取動作得到從數據庫數據。爲了使頁面加載速度非常快,並且在頁面加載到用戶後,kendo網格將執行ajax調用以將數據綁定到該頁面。

@(Html.Kendo().Grid(new List<UI.Models.TestViewModel>()) 
      .Name("RevGrid") 
      .Pageable() 
      .Sortable() 
      .Filterable() 
      .DataSource(dataSource => dataSource 
       .Ajax() 
      .Read(read => read.Action("GetDataTableAction", "ControllerName")) 
       .PageSize(20) 
       .ServerOperation(false) 

)) 

和控制器的方法看起來像

public ActionResult GetDataTableAction([DataSourceRequest] DataSourceRequest request) 
    { 
     List<Model> model = new List<Model>(); 
     DataSourceResult result = model.ToDataSourceResult(request); 
     return Json(result, JsonRequestBehavior.AllowGet); 
    } 
+0

真棒!感謝您的快速和明確的答案! – Jorge