2017-08-29 49 views
0

フォームが表示されているときに、初期値を表示するためにLookUpEditを取得しようとしています。私は、データソースとして国のリストをバインドして、LookUpEditで選択された項目として国を表示するフォームがロードされるときにEditValueを設定します。残念ながら、それは単に空の値を示しています。 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>initialCountryCountryviewModel.Addressのインスタンスに設定されていますプロパティCountry AddressCountryが含まれています。

私はEditValueを直接にのみ設定し、データバインディングをそれ自身のEditValueに設定することを試みました。私が試してみると、LookUpEditはフォームがロードされるときに常に空白になり、initialCountryに設定する必要があります。私はそれが本当にシンプルなものだと確信していますが、私はそれを見ていないので、どんな助けも大歓迎です。

答えて

2

this.country.EditValueCountryのインスタンスに設定しないでください。これはValueMemberなのでCountryIdに設定してください。

this.country.EditValue = initialCountry.CountryId; 

EDIT:あなたが選択したオブジェクトを取得したい場合は、マルコの答えに加えてGetDataSourceRowByKeyValue

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

回答ありがとうございます。興味深いことに、初期値が機能しましたが、フォームが送信された時点でCountryクラスのCountryIだけが正しい値に更新されました。 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; 

このモードでは、ルックアップ・メカニズムは、照会データ・ソース内のエディターの値(Countryビジネス・オブジェクト)と別のCountryビジネス・オブジェクトの一致を検索し、キー・フィールド( "CountryId")はRepositoryItemLookUpEditBase.KeyMemberプロパティに割り当てられます。ここで

は、このモードのいくつかの追加の利点です:

  • あなたが複数のキー・フィールド(「コンポジット/複合キー」機能)を使用することができます。

    //フィールド名は ';'で区切られます。文字
    this.city.Properties.KeyMember = "CountryId; RegionId; CityName";

  • あなたは別のデータコンテキストからロードされたビジネス・オブジェクトを、一致、および遅延ロードのアプローチのすべての利点を使用することができます。

    // CountryId値が一致するために十分です。
    //
    this.countryの読み込み中に、他のすべてのフィールド(例:CountryName)をスキップできます。EditValue =新しい国(){CountryId = 5}

+0

ありがとう、私はこの機能を認識していませんでした! –

+0

ええと、DXユーザーは常にWinFormsのすべての製品ラインを改善しています.LookUpEditはいくつかの新しいトリックを持つ古い犬の1つです)) – DmitryG

+0

ありがとう、これは役に立ちます! – peacemaker

関連する問題