2013-12-10 3 views
0
@(Html.Kendo().Grid<RTM.WEB.MVC.ViewModels.SortingViewModel.ProductViewModel>() 
.Name("ProductsGrid").HtmlAttributes("height:430") 
.Columns(columns => 
{ 
columns.Bound(p => p.IsSelected).Width(50).Title(""); 
columns.Bound(p => p.ProductName); 
columns.Bound(p => p.Price).Format("{0:C}"); 
columns.Bound(p => p.GroupName); 
// columns.Bound(p => p.MeasurementId); 
// columns.Bound(p => p.BarcodeValue); 
columns.Command(comand => 
{ 
comand.Custom("Edit").Click("ViewEdit"); 
comand.Destroy(); 

}).Title("Commands").Width(180); 

}) 
.DataSource(dataSource => dataSource 

.Ajax() 
.PageSize(10) 
//.Events(events=>events.Sync("addGroupData")) 
.ServerOperation(true) 
.Batch(true) 

.Events(events => 
{ 
events.Error("errorHandler"); 
events.Sync("addDataToResponce"); 
}) 
.Model(model => 
{ 
model.Id(p => p.ProductId); 
model.Field(p => p.ProductId).Editable(false); 
}) 

//          .Aggregates(aggregates => 
//{ 
// //aggregates.Add(p => p.ProductId); 
// //aggregates.Add(p => p.ProductName); 
// aggregates.Add(p => p.Price).Sum(); 
//}) 


.Group(groups => groups.Add(p => p.GroupName)) 

.Create(create => create.Action("Products_Create", "Sorting")) 
.Read(read => read.Action("Products_Read", "Sorting")) 
.Update(update => update.Action("Products_Update", "Sorting")) 
.Destroy(destroy => destroy.Action("Products_Destroy", "Sorting")) 
) 
.ToolBar(toolbar => 
{ 
toolbar.Template(@<text> 
<div > 
<a class="k-button" onclick="AddProduct()">Add New Product</a> 
@item.SaveButton() 
<a class="k-button" onclick="NewGroup()">NewGroup</a> 
<a class="k-button" onclick="UnGroup()">UnGroup</a> 
<label>Show products by warehouse:</label> 
@(Html.Kendo().DropDownList() 
.Name("warehouses") 
.OptionLabel("All") 
.DataTextField("Name") 
.DataValueField("WarehouseId") 
.AutoBind(false) 
// .Events(e => e.Change("warehousesChange")) 
.DataSource(ds => 
{ 
ds.Read("Products_Warehouses", "Sorting"); 

}) 
) 
</div> 
</text>); 

}) 
.Events(events => 
{ 
events.DataBound("dataBound"); 
}) 
.Pageable(page => page.PageSizes(true).Numeric(false).Refresh(true).Input(true)) 
//.Navigatable() 
.Selectable() 
.ColumnMenu() 
.Filterable() 
.Sortable() 
.Scrollable() 
.Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false)) 
) 
public JsonResult Products_Read([DataSourceRequest]DataSourceRequest request) 
{ 
int allcount=0; 
List<ProductModel> products= DataManager.ProductRepository.GetAllProducts(request.Page, request.PageSize,ref allcount); 
List<ProductViewModel> productViewModels=new List<ProductViewModel>(); 
foreach (var product in products) 
{ 
productViewModels.Add(ConvertProductViewModel(product)); 
} 
if (request.Sorts.Count != 0) 
{ 
string member = request.Sorts.First().Member; 
string sorttype = request.Sorts.First().SortDirection.ToString(); 
switch (member) 
{ 
case "IsSelected": 
if (sorttype == "Ascending") 
{ 
productViewModels = productViewModels.OrderBy(p => p.IsSelected).ToList(); 
} 
if (sorttype == "Descending") 
{ 
productViewModels = productViewModels.OrderByDescending(p => p.IsSelected).ToList(); 
} 
break; 
case "ProductName": 
if (sorttype == "Ascending") 
{ 
productViewModels = productViewModels.OrderBy(p => p.ProductName).ToList(); 
} 
if (sorttype == "Descending") 
{ 
productViewModels = productViewModels.OrderByDescending(p => p.ProductName).ToList(); 
} 
break; 
case "Price": 
if (sorttype == "Ascending") 
{ 
productViewModels = productViewModels.OrderBy(p => p.Price).ToList(); 
} 
if (sorttype == "Descending") 
{ 
productViewModels = productViewModels.OrderByDescending(p => p.Price).ToList(); 
} 
break; 
} 

} 


var result = new DataSourceResult() 
{ 
Data = productViewModels, 
Total = allcount, 
AggregateResults = null, 
Errors = null, 
}; 
return Json(result, JsonRequestBehavior.AllowGet); 
} 

이것은 내 코드입니다. 작업 서버에서 데이터를 반환하면 페이징이 작동하지 않습니다. 서버 페이징 검도 UI 그룹 그리드를 원하지만 응답 데이터 유형이 정의되지 않았습니다. 그룹 그리드에 대한 작업 예제가 필요합니다. 기본 그리드에서는 작동하지만 그룹 그리드에서는 작동하지 않습니다.Asp.Net MVC KendoUI grid

답변

2

컨트롤러 메서드를 업데이트하면됩니다. 당신이하는 정렬이 매우 기본적인 것처럼 보이기 때문에 제공된 검도 방법 ToDataSourceResult(DataSourceRequest request)을 사용할 수 있습니다.

는 컨트롤러에서 사용 섹션에 다음을 추가합니다
using Kendo.Mvc.Extensions; 

그런 다음 단순히 반환이 당신을 위해 어떤 필터링의 관리, 정렬, 그룹화 및 페이징을해야

return Json(productViewModels 
    .ToDataSourceResult(request, JsonRequestBehavior.AllowGet)); 

.

Product에서 ProductViewModel으로 개체를보다 쉽게 ​​매핑하려면 AutoMapper을 살펴볼 수도 있습니다.

+0

및 보내는 방법은 무엇입니까? – Narek

+0

'DataManager.ProductRepository.GetAllProducts (request.Page, request.PageSize, ref allcount); 코드를 변경하면 모든 객체를 반환하기 때문에 'ToDataSourceResult' 메소드가 페이징과 총계를 처리합니다. 만약 당신이 페이징을 다시 데이터베이스에 전달하고자한다면, AutoMapper를 보길 권한다. 그러면 ... ProductRepository.GetAllProducts(). Select (AutoMapper.Map ). ToDataSourceResult (...).)'. – niventc

+0

데이터가 너무 많으면 매우 느려지므로 DB에서 모든 데이터를 가져오고 싶지 않습니다. – Narek