2013-05-03 92 views
1

我在MVC劍道格,這是聲明Html.Kendo()。網格(Model.Orders)劍道網格MVC層次數據源detailtemplate當本地數據

對象「訂單」爲「列表細節」。我想把這個列表放在第二個網格中,其屬性爲ClientDetailTemplateId。 demo

我的問題是,如何設置模板的數據源,因爲「模式」已經有數據,在層次結構的例子中,數據源的模板,而不需要編寫調用動作控制器

回答

3

我這一個掙扎了很長一段時間,最終了解到,這可以使用服務器的結合來完成。

關鍵似乎是(可以告訴,未記錄的)「item」變量,該變量在DetailTemplate中可用,它給出包含應該綁定的數據的「master」網格上的當前行在細節電網(「詳細信息」,在你的情況)

下面是劍道ServerHierarchy樣本:

@model IEnumerable<Kendo.Mvc.Examples.Models.Employee> 

@{ Html.Kendo().Grid(Model) 
    .Name("Employees") 
    .Columns(columns => 
    { 
     columns.Bound(e => e.FirstName).Width(140); 
     columns.Bound(e => e.LastName).Width(140); 
     columns.Bound(e => e.Title).Width(200); 
     columns.Bound(e => e.Country).Width(200); 
     columns.Bound(e => e.City); 
    }) 
    .DetailTemplate(
     @<text>   
      @(Html.Kendo().Grid(item.Orders) 
        .Name("Orders_" + item.EmployeeID) 
        .Columns(columns => 
        { 
         columns.Bound(o => o.OrderID).Width(101); 
         columns.Bound(o => o.ShipCountry).Width(140); 
         columns.Bound(o => o.ShipAddress).Width(200); 
         columns.Bound(o => o.ShipName).Width(200); 
         columns.Bound(o => o.ShippedDate).Format("{0:d}"); 
        }) 
        .DataSource(dataSource => dataSource.Server())      
        .Pageable() 
        .Sortable() 
        .Filterable() 
      ) 
     </text> 
    ) 
    .RowAction(row => 
    { 
     if (row.Index == 0) 
     { 
      row.DetailRow.Expanded = true; 
     } 
     else 
     { 
      var requestKeys = Request.QueryString.Keys.Cast<string>(); 
      var expanded = requestKeys.Any(key => key.StartsWith("Orders_" + row.DataItem.EmployeeID) || 
       key.StartsWith("OrderDetails_" + row.DataItem.EmployeeID)); 
      row.DetailRow.Expanded = expanded; 
     } 
    }) 
    .Pageable() 
    .DataSource(dataSource => dataSource.Server().PageSize(5))  
    .Sortable() 
    .Render(); 
} 
+0

你的代碼幫了我。那謝謝啦。但我在排序,過濾等時出錯。任何想法爲什麼? – ary 2016-01-25 15:15:47

0

格代碼,呼叫的局部視圖,並通過訂單模型給它

<script id="template" type="text/kendo-tmpl"> 
@Html.Partial("_Orders",Model.Order) 
</script> 

在該局部視圖寫與模型劍道網格代碼作爲訂單模型

局部視圖

@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.OrderViewModel>() 
      .Name("grid_#=EmployeeID#") 
      .Columns(columns => 
      { 
       columns.Bound(o => o.OrderID).Width(70); 
       columns.Bound(o => o.ShipCountry).Width(110); 
       columns.Bound(o => o.ShipAddress); 
       columns.Bound(o => o.ShipName).Width(200); 
      }) 
      .DataSource(dataSource => dataSource 
       .Ajax() 
       .PageSize(5) 
       .Read(read => read.Action("HierarchyBinding_Orders", "Grid", new { employeeID = "#=EmployeeID#" })) 
      ) 
      .Pageable() 
      .Sortable() 
      .ToClientTemplate() 
    ) 
+0

嗨,爲什麼送Model.Order然後創建另一個網格qith相同的實體,我需要的是第二個網格中的「訂單」內的細節。 如何將此列表的詳細信息發送到此視圖? – Maldonel 2013-05-04 23:09:35

+0

@maldoxd這是僅供參考。我給你了嵌套網格的例子。當你點擊「細節」時,它會告訴你細節中的另一個網格。如果您不想要詳細的網格,則可以根據需要設計細節部分視圖。 – HaBo 2013-05-05 02:38:01