编辑在绑定到同一bindingsource的TextEdits中的GridControl中选择的多个行

时间:2013-08-30 14:11:50

标签: c# winforms data-binding devexpress multi-select

我的设置:

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中忽略了?是否存在我应该考虑的方法陷阱,或者为什么我应该完全不同地解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

此外,在将来的项目中,请考虑使用Entity Framework根据数据库的元素构建数据感知模型和自定义对象。

希望这有帮助!