Telerik网格中的多线单元(MVC3)

时间:2011-08-05 13:25:06

标签: c# .net telerik-grid telerik-mvc

使用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 个答案:

答案 0 :(得分:4)

谢谢@nekno。在我的案例中,我提出了这个解决方案。很抱歉暂时不回复。

在视图模型中

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

在视图中:  columns.Bound(o =&gt; o.Categories).ClientTemplate(“&lt;#= Categories#&gt;”)

答案 1 :(得分:1)

如果您尝试与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()