我正在尝试创建一个必须非常动态的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
等
答案 0 :(得分:1)
我认为如果省略“ColumnName”(无论如何都是多余的),它应该有效,并且还使动态表达更加明确:
columns.Add(
new WebGridColumn() {
Header = column.Header,
Format = (item) => @Html.Raw("<text>" + @item.Attributes[column.Name] + "</text>")
}
);
答案 1 :(得分:1)
此问题与参考变量有关。您需要根据WebGridColumn的其他属性具有Format属性。我就是这样做的:
@{
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);
}
}