Задайте общее количество страниц с возможностью просмотра в DetailsView ClientTemplate - PullRequest
0 голосов
/ 10 ноября 2011

mvc3, telerik mvc 2011.2.712

У меня есть сетка с DetailView.В DetailView у меня есть другая сетка в ClientTemplate DetailView.Во вложенной сетке мне нужно указать общее количество записей для подкачки.Количество записей - это один из столбцов в основной сетке, поэтому я могу получить к нему доступ через этот синтаксис "<#= 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 Ответ

2 голосов
/ 16 ноября 2011

Хорошо, я ошибался. Мне нужно было включить пользовательское связывание, а затем установить сумму в методе контроллера. Вот измененное определение сетки (обратите внимание на код для включения настраиваемой привязки, а также дополнительный параметр для 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 });
    }

Я надеюсь, что это может помочь кому-то еще.

...