2017-08-29 202 views
0

我試圖讓LookUpEdit在窗體顯示時顯示初始值。我綁定了一個國家列表作爲數據源,然後在表單加載時設置EditValue,這應該在國家LookUpEdit中顯示該國家。不幸的是,它只是顯示了一個空值。 LookUpEdit似乎不起作用,並允許我滾動瀏覽國家/地區列表並選擇一個項目,並在提交表單時傳回該值。DevExpress LookupEdit設置EditValue不起作用

鄉村類:

public class Country 
{ 
    public Country(); 
    public int CountryId {get; set;} 
    public string CountryName {get; set;} 
    public string IsoCode {get; set; } 
} 

含有LookUpEdit形式背後的代碼:

this.country.Properties.DataSource = this.Countries; 
this.country.Properties.DisplayMember = "CountryName"; 
this.country.Properties.ValueMember = "CountryId"; 

this.country.EditValue = initialCountry; 
this.country.DataBindings.Add("EditValue", viewModel.Address, "AddressCountry", false, DataSourceUpdateMode.OnPropertyChanged); 

在這個例子中this.Countries是一個已填充List<Country>initialCountry設定爲CountryviewModel.Address一個實例包含財產Country AddressCountry

我試過設置EditValue直接只設置數據綁定到它自己的EditValue。無論我嘗試什麼,LookUpEdit在表單加載時總是空白,我需要將其設置爲initialCountry。我確信這是一件非常簡單的事情,但我沒有看到它,所以任何幫助都非常感激。

回答

2

您不應將this.country.EditValue設置爲Country的實例,而是設置爲CountryId,因爲這是您的ValueMember

this.country.EditValue = initialCountry.CountryId; 

編輯:如果你想選擇的對象,你應該使用GetDataSourceRowByKeyValue

var selectedCountry = this.country.GetDataSourceRowByKeyValue(this.country.EditValue) as Country; 
+0

感謝您的回答。有趣的是,當表單提交時,只有Country類的CountryId更新爲正確的值,現在已經使初始值工作了。我希望整個對象將更新到LookUpEdit中的選定Country對象。有任何想法嗎? – peacemaker

+0

我已經更新了答案 –

+0

感謝您的幫助,修復了它! – peacemaker

2

除了馬爾科的回答是:

還有就是data binding to the entire business objects在查找一個特殊的模式:

this.country.Properties.DataSource = this.Countries; 
this.country.Properties.DisplayMember = "CountryName"; 
this.country.Properties.KeyMember = "CountryId"; 
this.country.EditValue = initialCountry; 

此模式允許查找機制通過將關鍵字段(「CountryId」)分配給RepositoryItemLookUpEditBase.KeyMember屬性,在查找數據源中找到編輯器值(Country業務對象)與另一個Country業務對象之間的匹配。

下面是此模式的一些額外的好處:

  • 可以使用多個關鍵字字段(「複合/化合物鍵」功能);

    //用';'分隔的字段名稱字符
    this.city.Properties.KeyMember =「CountryId; RegionId; CityName」;

  • 可以匹配的業務對象,從不同的數據的上下文加載,並使用延遲加載方法的所有優點:

    //該CountryId值是足夠的匹配。
    //在加載
    this.country時,可以跳過所有其他字段(例如國家/地區名稱)。EditValue = new Country(){CountryId = 5}

+0

謝謝你,我不知道這個功能! –

+0

是的,AFAIK DX傢伙不斷改進所有的WinForms產品系列,我一直驚喜地看到LookUpEdit是一些帶有一些新花樣的老狗) – DmitryG

+0

謝謝,這看起來很有用! – peacemaker