我想做以下事情: 我在对话框的顶部有一个XtraGrid(短网格)来选择例如提供。 要约中的经销商从所有经销商列表中获得。 'offer'和'dealer'是XPO Objects。 在下半部分有一个GridLookUpEdit(简短的LookUp)
也许我完全是错误的,因为之前我们使用过另一个数据映射器,但我完全陷入困境。
我已经定义了一个绑定到Grid的XPCollection和另一个绑定到LookUp的XPCollection。
如果我在网格中选择一行,则根据所选行,不是XPO对象的查找值会发生变化。 只要LookUp包含XPO对象,就不会显示任何内容。所有XPCollections的会话都是相同的。
如果我点击LookUp,会显示所有经销商的列表。
如果我选择一个条目,我会执行以下操作:
Order order = gridView.GetRow(gridView.FocusedRowHandle); => shows an order
Dealer actDealer = this.gridLookUpEditDealer.EditValue as Dealer; => shows a Dealer
order.Dealer = actDealer; => lets the selected value vanish.
this.gridLookUpEditDealer.EditValue保持不变,但不再显示。
LookUp的DataBinging是:
this.gridLookUpEditDealer.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.mainGrid, "Dealer", true));
this.gridLookUpEditDealer.Properties.DataSource = this.dealers; // dealers = XPCollection
如果我尝试:
this.gridLookUpEditDealer.EditValue = current.Dealer;
LookUpEdit显示值,但也显示“值无效”
我认为根本原因可能是Grid中的值未正确绑定为LookUp中的值。但是什么是正确的方法?
答案 0 :(得分:1)
我认为问题是,你直接绑定整个经销商。按照DevExpress Documentation。
中的说明设置GridLookUpEdit所以你应该为你的LookupEdit做以下事情:
通过类似这样的东西,你可以得到你的DealerObject:
Dealer dealer = GridLookUpEdit.Properties.GetRowByKeyValue(lookUpEdit.EditValue) as Dealer;
因为EditValue现在是你的DealerId。另请注意,您可以直接在Offer Grid中使用repositoryGridLookupEdit。因此,您不需要多个Grid就可以以可用的方式显示您的信息。每个报价都有一个自己的经销商专栏,持有经销商。 repositoryLookupEdit允许您在Grid中编辑经销商。
我希望这会对你有所帮助。如果没有澄清你的问题,我会帮助你;)
答案 1 :(得分:0)
实现相同结果的另一种方法。使用XPO,如果您更改绑定代码,如下所示,GridLookUpEdit将自动更新order.Dealer属性。
this.gridLookUpEditDealer.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.mainGrid, "Dealer!", true));
我只添加了属性名称后面的感叹号,现在可以删除此代码:
Order order = gridView.GetRow(gridView.FocusedRowHandle); => shows an order
Dealer actDealer = this.gridLookUpEditDealer.EditValue as Dealer; => shows a Dealer
order.Dealer = actDealer; => lets the selected value vanish.
此功能是专门为查找编辑器引入的,本文对此进行了描述:Property Descriptors。