2011-08-05 17 views
6

Używanie siatki Telerik MVC3, C#, .Net 2010;Komórka wielowierszowa w siatce Telerik (MVC3)

Mam siatkę moim zdaniem brzytwa:

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

co chcę zrobić, to ustawienie Kategoria kolumnę siatki jako multilinii.

Może być wiele kategorii dla produktu, więc komórki kategorii w siatce powinny być podobne;

Category0 
Category1 
Category2 

Starałem się Dołącz do kategorii wartości z System.NewLine i
i przypisać te wartości do własności ProductListItem.Categories. To się nie zmienia. Tekst jest wciąż pojedynczą linią.

Z góry dziękuję.

Odpowiedz

4

Dziękuję @nekno. W moim przypadku wymyśliłem to rozwiązanie. Przepraszam, że nie odpowiadam od jakiegoś czasu.

w widoku modelu

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

zdaniem: columns.Bound (o => o.Categories) .ClientTemplate ("< # = # Kategorie>")

1

Jeśli jest to łatwe, gdy próbowałeś połączyć z NewLine, spróbuj "<br />" zamiast System.NewLine.

W przeciwnym razie, jaki jest typ danych twojej nieruchomości ProductListItem.Categories? Jeśli jest to List<String> lub inny IEnumerable, możesz użyć kolumny szablonu zamiast powiązanej kolumny. Użyć item odwołać obecną ProductListItem w szablonie:

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

Innym rozwiązaniem może być, aby stolik w kolumnie szablonu i zostawić ProductListItem.Categories jako List np 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 właściwość nadchodzi jako połączony ciąg; this.Categories = String.Join ("
", entity.Categories.Select (o => o.Current.Name)); Próbowałem tego i twoją radę, aby korzystać z Porady dotyczącej szablonów, ale wciąż jest taka sama: /. – berdem

+0

@berdem - czy możesz wyświetlić źródło HTML w przeglądarce i wkleić tutaj to, co pokazuje to komórka tabeli z wieloma kategoriami? – nekno