0
我有一個動態數據列表,其中包含由PIVOT函數創建的動態列數。一切或多或少的作品,但我想申請一些自定義格式的一些列。我想通了如何通過只是把第一行和鑄造它像這樣得到列的列表:MVC 3具有動態源的WebGrid
var columns = Model.Comparisons.Select(x => x).FirstOrDefault() as IDictionary<string, object>;
接下來,我決定通過循環在「列」創建我的列表,其中只要工作原理通過它們的動態字段名直接從句例如:我引用在動態域「格式」:
foreach (var c in columns)
{
switch (c.Key)
{
case "Cost":
cols.Add(grid.Column(
columnName: c.Key,
header: c.Key,
format: (item) => Convert.ToDecimal(item.Cost).ToString("C")));
break;
default:
cols.Add(grid.Column(columnName: c.Key, header: c.Key, format: item => item[c.Key]));
break;
}
}
「默認」不動態獲取每個記錄的值。我相信它與「item [c.Key]」vs item.Cost有關。問題是我不想爲每個領域寫出不同的案例,主要是因爲我不能提前知道它們,因爲數據可能會改變。大約有6個字段將始終存在。不過我知道數據類型,這就是爲什麼我想在它們上面放置一個自定義格式的原因。
編輯
我設法通過編寫擴展方法來解決這個問題。
public static class DynamicDataHelper
{
public static WebGridColumn GetColumn(this HtmlHelper helper, string vendor)
{
return new WebGridColumn()
{
ColumnName = vendor,
Header = vendor,
Format = (item) => helper.ActionLink(
(string)Convert.ToDecimal(item[vendor]).ToString("C"),
"VendorSearch",
"Compare",
new { Vendor = vendor, mpn = item.MPN },
new { target = "_blank" })
};
}
}