【问题标题】:DataGridView - DataTable - displaying propertiesDataGridView - DataTable - 显示属性
【发布时间】:2009-01-28 16:38:58
【问题描述】:

(.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: 使 MyProp 属性可绑定:

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

    相同,与试用 2 没有区别

简而言之:

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

有人有什么想法吗?

提前致谢!

一月

【问题讨论】:

  • 为什么选择datagridview?是否涉及分页?
  • 因为这是默认的网格组件,DataGrid 不在工具箱中。

标签: c# datagridview datatable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我尝试使用 list 但我在将其应用于嵌套类时感到困惑......对于单级类它工作正常
    【解决方案3】:

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

    在网格视图中

    1. 声明一个onrowdatabound方法

    2. 使用模板

    在方法中:

    1. 抓取对象

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

    你也可以通过使用模板而不是默认布局来做你想做的事情。

    【讨论】:

    • 我认为他指的是DataGridView,而不是Web DataGrid。如果记忆正确,则 DGV 没有 OnRowDataBound 事件。
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2012-04-15
    • 2019-12-16
    相关资源
    最近更新 更多