DataGridView - DataTable - 显示属性

时间:2009-01-28 16:38:58

标签: c# datagridview datatable

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

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

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

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

但我似乎无法让它发挥作用。

示意性地:

  • myTable.Column1.Name:“Obj”
  • myDataSet包含1个表:myTable(填充几行)
  • myBindingSource.datasource = myDataSet
  • myBindingSource.DataMember = myTable
  • myDataGridView.DataSource = myBindingSource
  • myDataGridView中的
  • :1 DataGridViewTextBoxColumn

  • 试用1:

Column.DataPropertyName =“Obj”(默认生成)

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

  • 试用2:

GridViewColumn.DataPropertyName =“Obj.MyProp”

不显示任何内容(MyProp的 get 永远不会被调用)

    试用3:li>

    使MyProp属性可绑定:

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

    Samesame,与tryout 2

    没有什么不同

简而言之:

GridViewColumn.DataPropertyName似乎不支持向下钻取到数据表列中的对象。

任何想法?

提前致谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您只能绑定到数据源的直接属性。对于DataTable,这意味着列。跳过两个选择:

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

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

答案 2 :(得分:0)

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

在gridview

  1. 声明一个onrowdatabound方法

  2. 使用模板

  3. 在方法中:

    1. 抓住对象

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

    3. 您也可以使用模板而不是默认布局来执行您想要的操作。