在DetailsView ClientTemplate中设置总可分页记录

时间:2011-11-10 19:52:53

标签: asp.net-mvc-3 grid telerik-mvc

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();
%>

在证明阅读我的问题的过程中,我想到我可以通过使用客户事件找到解决方案。我将按原样发布此问题,如果找到解决方案,请更新它。

1 个答案:

答案 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 });
    }

我希望这可以帮助别人。