我的设置:
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中忽略了?是否存在我应该考虑的方法陷阱,或者为什么我应该完全不同地解决这个问题?
答案 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根据数据库的元素构建数据感知模型和自定义对象。
希望这有帮助!