2011-08-05 13 views
6

Usando la red Telerik MVC3, C#, .Net 2010;Celda multilínea en malla Telerik (MVC3)

que tienen una cuadrícula en mi opinión, la maquinilla de afeitar:

@(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() 

Lo que quiero hacer es establecer la columna Categoría de la cuadrícula como línea múltiple.

Puede haber muchas categorías para un Producto, por lo que las celdas de Categoría en la cuadrícula deberían ser similares;

Category0 
Category1 
Category2 

que trataba de juntarse con los valores de categoría System.NewLine y
y asignar estos valores a la propiedad ProductListItem.Categories. No cambia El texto sigue siendo una sola línea.

Gracias de antemano.

Respuesta

4

Gracias @nekno. Se me ocurrió esta solución en mi caso. Lamento no responder en un momento.

en vista del modelo:

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

a la vista: columns.Bound (o => o.Categories) .ClientTemplate ("< # = # Categorías>")

1

Si es fácil donde intentó unir con NewLine, intente "<br />" en lugar de System.NewLine.

De lo contrario, ¿cuál es el tipo de datos de su propiedad ProductListItem.Categories? Si es un List<String> o algún otro IEnumerable, puede usar una columna de plantilla en lugar de una columna encuadernada. Se utiliza item hacer referencia a la corriente ProductListItem en la plantilla:

@(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() 

Otra opción podría ser la de hacer una tabla en la columna de la plantilla, y dejar su ProductListItem.Categories como List, por ejemplo, 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() 
+0

ProductListItem.Categories la propiedad viene como una cadena unida; this.Categories = String.Join ("
", entity.Categories.Select (o => o.Current.Name)); Intenté esto y sus consejos para utilizar el consejo de Plantilla, pero sigue siendo el mismo: /. – berdem

+0

@berdem - ¿Puedes ver el código fuente HTML en tu navegador y pegar aquí lo que muestra para esa celda de tabla con múltiples categorías? – nekno