我有一个动态的数据列表,其中包含由PIVOT函数创建的动态列数。一切都或多或少有效,但我想在一些列中应用一些自定义格式。我想出了如何获取列的列表,只需取第一行并像这样投射它:
var columns = Model.Comparisons.Select(x => x).FirstOrDefault() as IDictionary<string, object>;
接下来我决定通过循环遍历&#34;列&#34;来创建我的列表,只要我引用&#34;格式的动态字段,它就会起作用:&#34;例如,通过动态字段名称的子句,例如:
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;
}
}
&#34;默认&#34;不会动态获取每条记录的值。我认为这与&#34;项目有关[c.Key]&#34; 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" })
};
}
}
答案 0 :(得分:0)
我使用我编写的Html Helper编辑了我的帖子,这实际上构建了我遇到问题的自定义WebGridColumn对象。 “供应商”从View传入,然后在运行时解析。它很棒。