Многострочная ячейка в сетке Telerik (MVC3) - PullRequest
6 голосов
/ 05 августа 2011

Использование сетки Telerik MVC3, C #, .Net 2010;

У меня есть сетка на моем бритве:

@(Html.Telerik().Grid<ProductListItem>()
.Name("Grid")
.Columns(columns =>
{
       columns.Bound(o => o.Current.Name).Sortable(true).Filterable(false).Width(150);
       columns.Bound(o => o.Categories).Sortable(true).Filterable(false).Width(200);
       //other column bindings...
})
.DataBinding(dataBinding => dataBinding.Ajax().Select(Model.GridAjaxRequestAction.ActionName, Model.GridAjaxRequestAction.ControllerName))
.Pageable(settings => settings.Total(Model.TotalRow))
.EnableCustomBinding(true)
.Sortable()
.Filterable()

То, что я хочу сделать, это установить столбец категории сетки как многострочный.

Может быть много категорий для продукта, поэтому ячейки категории в сетке должны быть такими:

Category0
Category1
Category2

Я попытался объединить значения категорий с помощью System.NewLine и
и присвоить эти значения свойству ProductListItem.Categories. Это не меняет. Текст по-прежнему в одну строку.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Спасибо, @nekno. Я придумал это решение в моем случае. Извините, что не ответил через некоторое время.

в представлении модель:

this.Categories = String.Join("<br>", entity.Categories.Select(o => o.Current.Name));

в поле зрения: columns.Bound (o => o.Categories) .ClientTemplate ("<# = Categories #>")

1 голос
/ 06 августа 2011

Если вам легко выполнить объединение с помощью NewLine, попробуйте "<br />" вместо System.NewLine.

В противном случае, какой тип данных у вашего свойства ProductListItem.Categories?Если это List<String> или какой-то другой IEnumerable, вы можете использовать столбец шаблона вместо связанного столбца.Вы используете item для ссылки на текущий ProductListItem в шаблоне:

@(Html.Telerik().Grid<ProductListItem>()
.Name("Grid")
.Columns(columns =>
{
       columns.Bound(o => o.Current.Name).Sortable(true).Filterable(false).Width(150);
       columns.Template(
            @<text>
                @String.Join("<br />", item.Categories)
            </text>)
            .Sortable(true).Filterable(false).Width(200);
       //other column bindings...
})
.DataBinding(dataBinding => dataBinding.Ajax().Select(Model.GridAjaxRequestAction.ActionName, Model.GridAjaxRequestAction.ControllerName))
.Pageable(settings => settings.Total(Model.TotalRow))
.EnableCustomBinding(true)
.Sortable()
.Filterable()

Другой вариант может состоять в том, чтобы создать таблицу в столбце шаблона и оставить свой ProductListItem.Categories как List, например, this.Categories = entity.Categories.Select(o => o.Current.Name).ToList();

@(Html.Telerik().Grid<ProductListItem>()
    .Name("Grid")
    .Columns(columns =>
    {
           columns.Bound(o => o.Current.Name).Sortable(true).Filterable(false).Width(150);
           columns.Template(
                @<text>
                    <table border=0>
                         @foreach(var category in item.Categories){
                             <tr><td>@category</td></tr>
                         }
                    </table>
                </text>)
                .Sortable(true).Filterable(false).Width(200);
           //other column bindings...
    })
    .DataBinding(dataBinding => dataBinding.Ajax().Select(Model.GridAjaxRequestAction.ActionName, Model.GridAjaxRequestAction.ControllerName))
    .Pageable(settings => settings.Total(Model.TotalRow))
    .EnableCustomBinding(true)
    .Sortable()
    .Filterable()
...