3

我的设置:

C#.Net 4.0、Windows Forms、DevExpress 13.1.5 虽然我怀疑它是 DX 问题

我有一个顶部带有 GridControl(带有 GridView)的表单和一个在下面的 LayoutControl 中保存 TextEdits 和其他编辑的详细信息区域。网格和下面的编辑都绑定到绑定源列表中包含的对象的属性。网格设置为 ReadOnly、MultiSelect、RowSelect,其所有列都设置为 ReadOnly,不可聚焦。编辑只发生在下面的详细信息区域。

我要创建的行为:

在网格中选择多行时,下面的编辑应显示以下内容:

  • 所有选定行中相关字段的值都相同 -> 显示该值
  • 有问题的字段的值在行之间有所不同->什么也不显示

如果用户在选择多行时写入 TextEdit:

  • 编辑的值应该更新所有选定行的同一字段的值

我在哪里:

我正在通过构建一个可以知道选择的自定义 BindingSource 来制定解决方案。它将对象列表绑定到网格,并将不属于列表的单个对象绑定到编辑。根据选择,我将设置该单个对象的属性或将其更改转发到列表中的选定对象。

我将它用于具有 2 个绑定源的单个属性,现在将其扩展为使用反射来为所有公共属性执行此操作。我还想将整个行为封装到一个看起来和行为类似于 BindingSource 的类中,只是添加了该行为。

问题:

有没有更简单的方法来实现这一点?我在 .Net 或 DevExpress 中忽略的东西是否已经存在?我的方法中是否存在我应该考虑的陷阱,或者为什么我应该采取完全不同的方式?

4

1 回答 1

2

我认为您可以以更简单的方式实现目标:

只需将单个 BindingSource 与您需要的所有数据绑定到网格。那应该显示数据。

然后,绑定来自同一 BS 的必填字段,通过 DataBindings 属性进行编辑。

然后,您可以实现一个保存对象(通过控件或以编程方式),以便在编辑中所做的更改显示在网格中。

要检查网格值,您可以使用:

//get the handles of the rows
gridView.GetSelectedRows();

//get the value of the desirable cells
gridView.GetRowCellValue(handle, column);

此外,在未来的项目中,考虑使用实体框架来构建基于数据库元素的数据感知模型和自定义对象。

希望这有帮助!

于 2015-09-18T09:51:26.803 回答