Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 与BindingSource绑定的UltraWinGrid嵌套对象属性_Winforms_Bindingsource_Ultrawingrid - Fatal编程技术网

Winforms 与BindingSource绑定的UltraWinGrid嵌套对象属性

Winforms 与BindingSource绑定的UltraWinGrid嵌套对象属性,winforms,bindingsource,ultrawingrid,Winforms,Bindingsource,Ultrawingrid,我正在开发一个winforms应用程序,通过ultrawingrid渲染域/对象数据。我使用bindingsource将对象绑定到网格。对于简单的对象,这非常有效 我想弄清楚的是,呈现一个对象,其中包含嵌套对象,例如,Person类将具有Address类的属性。我想将Address(Street、City、Country)的属性与Person类的属性一起显示为网格中的列 网格必须是可编辑的,任何用户更改都需要反映在域对象上(我正在通过绑定源进行此操作) 最好的办法是什么 绑定 我通常使用以下代码

我正在开发一个winforms应用程序,通过ultrawingrid渲染域/对象数据。我使用bindingsource将对象绑定到网格。对于简单的对象,这非常有效

我想弄清楚的是,呈现一个对象,其中包含嵌套对象,例如,Person类将具有Address类的属性。我想将Address(Street、City、Country)的属性与Person类的属性一起显示为网格中的列

网格必须是可编辑的,任何用户更改都需要反映在域对象上(我正在通过绑定源进行此操作)


最好的办法是什么

绑定

我通常使用以下代码:

Dim persons = new BindingList(Of Person)
UltraGrid1.DataSource = persons
绑定列表将为您处理行的添加/删除,但它不知道
Person
中的属性。要使绑定的这一部分正常工作,您需要
Person
实现。当属性发生更改时,这将通知ultragrid。代码看起来是这样的(是的,不幸的是这使得您无法使用自动实现的属性):

Private\u电话号码作为字符串
公共属性PhoneNumber作为字符串
得到
给我回电话号码
结束
设置(ByVal值作为字符串)
如果值为电话号码,则
Me.\u phoneNumber=值
NotifyPropertyChanged(“电话号码”)
如果结束
端集
端属性
展平对象层次结构

看起来像是你要的。有几种选择:

  • 在InitializeRow事件期间填充的UI中未绑定的列
  • 修改
    Person
    类以公开
    Address
    的属性,并使用一些传递代码来处理属性设置
  • (如果需要,我可以提供代码示例)

    一对多嵌套对象

    例如,如果每个人都有多个地址,则可以将它们嵌套在每个
    person
    行下的可展开部分中。要做到这一点,在
    人员
    中有一个
    绑定列表(地址)
    ,它还实现了
    INotifyPropertyChanged
    。不是您想要的,而是一个选项:)

    警告语

    如果你正在做的话,请注意几点。显然,您需要在视图和演示者中对
    BindingList
    进行相同的引用。另外,如果需要重置内容,我建议调用
    list.Clear()
    ,而不是创建一个新的。如果您在presenter中创建了一个新的presenter,您将断开与
    UltraGrid
    的连接,并且必须在视图中重新设置
    DataSource
    属性

    Private _phoneNumber As String
    Public Property PhoneNumber As String
      Get
        Return Me._phoneNumber
      End Get
      Set(ByVal value As String)
        If value <> _phoneNumber Then
          Me._phoneNumber = value
          NotifyPropertyChanged("PhoneNumber")
        End If
      End Set
    End Property