ASP.Net GridView:使用Indexer而不是Property的BoundField

时间:2012-03-05 20:03:21

标签: asp.net gridview .net-4.0

我有一个类,其大部分数据都包含在字典中,如下所示:

public class Document
{
    public string this[string key]
    {
        get { return (details.ContainsKey(key)) ? details[key] : null; }
    }

    public long DocumentId { get; set; }

    private Dictionary<string, string> details = new Dictionary<string, string>();
    public Dictionary<string, string> Details { get { return details; } }
}

我需要将这些对象绑定到GridView,我在那里动态设置要显示的列。

我的问题是,如何设置我的GridView以寻找索引器来提取其数据(例如,如果我想要一个列映射到Details字典中的值的列,其中键为“DocumentName”):

BoundField bf = new BoundField();
bf.DataField = "DocumentName";
bf.HeaderText = "Document Name";

myGridView.Columns.Add(bf);

这不起作用,因为“DocumentName”不是Document的属性。我知道如果这些列是硬编码的,我可以在页面上使用<%# Eval("[DocumentName]") %>来查看索引器,但是如何通过代码执行此操作呢?

或者我是否被迫创建一个模板列,添加一个标签,并在每一行的创建中填充它?

1 个答案:

答案 0 :(得分:1)

是的,按照您的建议使用模板并从代码隐藏中填充是一种方法。其他方法是从提供的数据中可编程地生成DataTable对象,并将其绑定到网格。这有时也是一种有用的解决方案。