将GridLookUpEdit绑定到XtraGridColumn的正确方法

时间:2016-10-25 14:43:08

标签: c# winforms devexpress

我想做以下事情: 我在对话框的顶部有一个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中的值。但是什么是正确的方法?

2 个答案:

答案 0 :(得分:1)

我认为问题是,你直接绑定整个经销商。按照DevExpress Documentation

中的说明设置GridLookUpEdit

所以你应该为你的LookupEdit做以下事情:

  1. 设置LookupEdit.ValueMember =“DealerId”;
  2. 将EditValue绑定到此DealerId。
  3. 设置LookupEdit.DisplayMember =“Name”; //或者......你想表现
  4. 设置LookupEdit.DataSource = YourDealer-List
  5. 通过类似这样的东西,你可以得到你的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