2012-03-13 39 views
0

我正在嘗試創建一個非常動態的WebGrid。列在列表中,我已經像這樣做了定義:高級ASP.NET 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 

回答

1

我認爲,如果你離開了「的ColumnName」(多餘反正),並且也使動態表情有點更加明確它應該工作:

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