关于c#:DataGridView在绑定到DataTable时显示空单元格

DataGridView displays empty cells when bound to typed DataTable

我正在创建一个简单的应用程序,它只是用强类型的数据表填充DataGridView。我的问题是,尽管包含数据,但所有单元格都显示为空,我有一个CellDoubleClick事件,它可以提取单元格的基础值(按预期键入),但列显示为空。

inode类型的对象都定义了toString()方法,我的假设是,DataGridView足够智能,可以调用该方法any,显示为单元格内容,但似乎不是。

这是我当前的测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        //Add some fake test data
        DataTable data = new DataTable();
        data.Columns.Add("Subject");
        data.Columns.Add("Predicate");
        data.Columns.Add("Object");
        data.Columns["Subject"].DataType = typeof(INode);
        data.Columns["Predicate"].DataType = typeof(INode);
        data.Columns["Object"].DataType = typeof(INode);

        Graph g = new Graph();
        DataRow row = data.NewRow();
        row["Subject"] = g.CreateURINode(new Uri("http://example.org/subject"));
        row["Predicate"] = g.CreateURINode(new Uri("http://example.org/predicate"));
        row["Object"] = g.CreateURINode(new Uri("http://example.org/object"));
        data.Rows.Add(row);
        this.dvwBrowser.DataSource = data;
        this.dvwBrowser.AutoResizeColumns();

当我将数据表绑定到DataGridView时,如何获取要在单元格中显示的toString()方法的值?


dvwBrowser列使用的是用户定义的类型(INode),而不是基.NET框架数据类型和byte[]之一。inode必须至少用SerializableAttribute标记。您可以在这里找到进一步的解释(在页面的底部,代码示例之前)。