0

(.NET 2.0、System.Windows.FormsDataGridView 和 DataTable)

我有 1 个数据网格连接到 1 个数据表。

该数据表包含 1 列:包含我自己类型“MyObject”的对象。
MyObject 有一个公共字符串属性“MyProp”。

我想在网格中显示 1 列:显示表中 MyObjects 的属性 MyProp 的字符串值。

但我似乎无法让它工作。

示意图:

  • myTable.Column1.Name:“对象”
  • myDataSet 包含 1 个表:myTable(填充了几行)
  • myBindingSource.datasource = myDataSet
  • myBindingSource.DataMember = myTable
  • myDataGridView.DataSource = myBindingSource
  • 在 myDataGridView: 1 DataGridViewTextBoxColumn

  • 试用一:

Column.DataPropertyName="Obj"(默认生成)

显示(覆盖)MyObject.ToString() 的结果 不是我想要的,这个函数用于记录。

  • 试玩2:

GridViewColumn.DataPropertyName="Obj.MyProp"

不显示任何内容(从未调用 MyProp 的get

  • 试用 3:使 MyProp 属性可绑定:

    [Bindable (BindableSupport.Yes)]
    public string MyProp
    { ...
    

    相同,与试用 2 没有区别

简而言之:

GridViewColumn.DataPropertyName 似乎不支持进一步深入到数据表列中的对象。

有人有什么想法吗?

提前致谢!

4

3 回答 3

1

尝试将 Obj.MyProp 字符串值放入数据表行。将对象放入其中需要将其转换为字符串表示形式 (Obj.ToString()),这将为您提供所看到的输出。

数据表很像电子表格,而不像 Array(Of objects)。你必须这样对待它。

于 2009-01-28T17:24:21.727 回答
0

您只能绑定到数据源的直接属性。对于DataTable,这意味着列。两个选项跃入脑海:

  • 不要使用DataTable- 只需使用List<MyObject>orBindingList<MyObject>
  • (或)覆盖MyObject.ToString()返回MyProp

第二个不是很灵活-我会选择第一个。毕竟,1-columnDataTable真正为您做什么?

于 2009-01-28T18:01:07.427 回答
0

这可以通过 OnRowDataBound 事件来完成。

在网格视图中

  1. 声明一个 onrowdatabound 方法

  2. 使用模板

在方法中:

  1. 抓取物体

  2. 根据需要填充或操作显示

您还可以使用模板而不是默认布局来做您想做的事情。

于 2009-01-28T18:07:25.527 回答