0

我有一个动态数据列表,其中包含由 PIVOT 函数创建的动态列数。一切或多或少都有效,但我想对某些列应用一些自定义格式。我想出了如何通过只取第一行并将其转换为这样来获取列列表:

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]”与 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" })
        };
    }
}
4

1 回答 1

0

我使用我编写的 Html Helper 编辑了我的帖子,它实际上将构建我遇到问题的自定义 WebGridColumn 对象。“供应商”从视图传入,然后在运行时解析。它工作得很好。

于 2012-07-17T21:32:04.477 回答