Расширенный ASP.NET WebGrid - динамические столбцы и строки - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь создать WebGrid, который должен быть очень динамичным.Столбцы определены в списке, который я сделал так:

@{
    List<WebGridColumn> columns = new List<WebGridColumn>();
    foreach (var column in Model.Columns)
    {
        columns.Add(new WebGridColumn() { ColumnName = column.Name, Header = column.Name });
    }
}

@grid.GetHtml(
    columns: columns)

Все хорошо, но у меня проблема со строками.Я попытаюсь объяснить ...

Для этого вопроса, скажем, у нас есть два столбца для Имя и Адрес .

У меня естьколлекция объектов строки, скажем, объекты SearchResult.SearchResult содержит словарь с любым количеством атрибутов, таких как имя, адрес, телефон, высота, размер бюстгальтера или что-либо еще (например, шаблон EAV).Мне нужно получить доступ к атрибутам, основанным на имени столбца.

Я подумал, что мог бы сделать это, используя формат , но я не могу понять это.Я хочу что-то вроде этого:

columns.Add(new WebGridColumn() { ColumnName = column.Name, Header =
    column.Header, Format = @<text>@item.Attributes[column.Name]</text> });

Такого рода работы, но, несмотря на создание формата для отдельных столбцов, строки заполняются только форматом последнего столбца.т.е.:

Name            Address
1 Main Street   1 Main Street
45 Paradise Av  45 Paradise Av

и т. д.

Ответы [ 2 ]

1 голос
/ 22 мая 2012

Эта проблема связана со ссылочными переменными. Вам необходимо иметь свойство Format в терминах других свойств WebGridColumn. Вот как бы я это сделал:

@{
    List<WebGridColumn> columns = new List<WebGridColumn>();
    foreach (var column in Model.Columns)
    {
        var col = new WebGridColumn();
        col.Header = column.Name;
        col.Format = (item) => @Html.Raw("<text>" + @item.Attributes[col.Header] +  "</text>");
        columns.Add(col);
    }
}
1 голос
/ 17 апреля 2012

Я думаю, что это должно сработать, если вы опустите "ColumnName" (в любом случае, излишнее), а также сделаете динамическое выражение немного более явным:

columns.Add(
   new WebGridColumn() { 
      Header = column.Header, 
      Format = (item) => @Html.Raw("<text>" + @item.Attributes[column.Name] + "</text>")
   }
);
...