mvc3,telerik mvc 2011.2.712
我有一个带有DetailView的网格。在DetailView中,我在DetailView的ClientTemplate中有另一个网格。在嵌套网格中,我需要设置分页的记录总数。记录数是主网格中的一列,因此我可以通过此语法"<#= NumPackages #>"
访问它。问题是paging.Total
采用int类型的单个参数。我尝试了以下方法:
paging.Total(int.Parse("<#= NumPackages #>"))
但当然这不起作用,因为在Parse执行时,表达式"<#= NumPackages #>"
尚未评估。在这一点上,我看到的唯一选择是简单地恢复所有记录并让网格计算总数。最大记录只有99,所以它是可行的。我甚至不担心它,但获取数据的查询非常复杂,因此需要几秒钟才能完成。任何人都知道如何从主网格中获取NumRecords
并将其提供给分页。子网格的总数?
这是我的网格定义:
<% Html.Telerik().Grid<DtsWeb.Models.District.DistrictSearchResultItem>()
.Name("OriginationGrid")
.DataBinding(db => db.Ajax()
.Select("DistrictOriginationSelect", "District")
)
.DataKeys(key => key.Add(e => e.ID))
.Columns(col => {
col.Bound(c => c.CreationDate);
col.Bound(c => c.CreatedBy);
col.Bound(c => c.ShipTo);
col.Bound(c => c.NumPackages);
col.Bound(c => c.LabelComment);
col.Bound(c => c.UserComment);
col.Bound(c => c.ID).ClientTemplate("<button id='<#= ID #>' onclick='editOrigination(<#= ID #>)'>Edit</button>").Title("");
})
.DetailView(details => details.ClientTemplate(
Html.Telerik().Grid<DtsWeb.Models.District.PackageDeliveryItem>()
.Name("Package_<#= ID #>")
.DataBinding(dbp => dbp.Ajax()
.Select("OriginationPackages", "District", new { originationID = "<#= ID #>" })
)
.Pageable(paging => paging.Total(int.Parse("<#= NumPackages #>")).PageSize(10))
.ToHtmlString()
))
.Pageable(paging => paging.PageSize(25))
.Sortable(sort => sort.OrderBy(c => c.Add(e => e.CreationDate)))
.Render();
%>
在证明阅读我的问题的过程中,我想到我可以通过使用客户事件找到解决方案。我将按原样发布此问题,如果找到解决方案,请更新它。
答案 0 :(得分:2)
好的,我错了。我需要启用自定义绑定,然后在控制器方法中设置总数。这是修改后的网格定义(注意启用自定义绑定的代码以及Ajax()的附加参数。在嵌套网格中选择:
<% Html.Telerik().Grid<DtsWeb.Models.District.DistrictSearchResultItem>()
.Name("OriginationGrid")
.DataBinding(db => db.Ajax()
.Select("DistrictOriginationSelect", "District")
//.Update("DistrictOriginationUpdate", "District")
)
.DataKeys(key => key.Add(e => e.ID))
.Columns(col => {
col.Bound(c => c.CreationDate);
col.Bound(c => c.CreatedBy);
col.Bound(c => c.ShipTo);
col.Bound(c => c.NumPackages);
col.Bound(c => c.LabelComment);
col.Bound(c => c.UserComment);
col.Bound(c => c.ID).ClientTemplate("<button id='<#= ID #>' onclick='editOrigination(<#= ID #>)'>Edit</button>").Title("");
//col.Command(com => com.Edit());
})
.DetailView(details => details.ClientTemplate(
Html.Telerik().Grid<DtsWeb.Models.District.PackageDeliveryItem>()
.Name("Package_<#= ID #>")
.DataBinding(dbp => dbp.Ajax()
.Select("OriginationPackages", "District", new { originationID = "<#= ID #>", total = "<#= NumPackages #>" })
)
.Pageable(paging => paging.PageSize(10))
.EnableCustomBinding(true)
.ToHtmlString()
))
.Pageable(paging => paging.PageSize(25))
.Sortable(sort => sort.OrderBy(c => c.Add(e => e.CreationDate)))
.Render();
%>
这是我感兴趣的人的控制器代码:
[GridAction(EnableCustomBinding = true)]
public ActionResult OriginationPackages(GridCommand command, int originationId, int total)
{
this.entities = new DtsEntities();
var list = DistrictSearchResultItem.GetPackages(this.entities, originationId, command.Page, command.PageSize, total);
return View(new GridModel { Data = list, Total = total });
}
我希望这可以帮助别人。