1

編集1

私の問題は次のことに起因すると思います。ドロップダウン部分を埋める関数は、表示メンバーをCountyNameに設定します。次に、提案されているように、SelectedTextまたはEditValueを設定しようとすると、その関数は、DropDownリストDisplayMember内の何かと一致させようとするCountyIDのみを返します。ValueMemberリストの何かと一致させるために必要です。

以下を使用して動作させましたが、これはハックであり、実際の解決策を見つけていただければ幸いです。

lkuResidenceCounty.ItemIndex = Convert.ToInt32(row["ResidencyCountyID"].ToString());

元の投稿

メンバーフォームにルックアップボックス(DevExpress)があり、DBからこのコードで可能な値を入力します->

        lkuResidenceCounty.Properties.DataSource = ConnectBLL.BLL.Person.CountyList();
        lkuResidenceCounty.Properties.PopulateColumns();
        lkuResidenceCounty.Properties.DisplayMember = "CountyName";
        lkuResidenceCounty.Properties.ValueMember = "CountyID";
        lkuResidenceCounty.Properties.Columns[0].Visible = false;
        lkuResidenceCounty.Properties.Columns[2].Visible = false;
        lkuResidenceCounty.Properties.Columns[3].Visible = false;

CountyNameが期待どおりに表示されるため、これは問題なく機能します。

ただし、以下を使用してこのフィールドの既存のメンバーの値をロードしようとすると、これはDataSetから行を取得する関数の一部です->

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

空白のボックスが表示されます。コードをステップスルーしましたが、メンバーに正しいIDが返されています。

残念ながら、ドロップダウンオプションを入力するためのストアドプロシージャは、「CountyName」列と「CountyID」列を持つメンテナンステーブルから取得されます。ですから、それは正しいです。残念ながら、特定の個人の現在の郡をロードするストアドプロシージャは、「ResidencyCountyID」という列がある個人テーブルから取得します。「ResponsibilityCountyID」列もあるため、この名前が付けられています。

私はそれらの両方が共存する方法が必要です、何か解決策はありますか?

ありがとう!

4

3 に答える 3

2

DisplayMemberとValueMemberは、選択可能な値のリストをコントロールに入力するために使用されます。設定されたLookUpEditコントロールの選択された値を設定するには、そのEditValueプロパティを設定します。

lkuResidenceCounty.EditValue = row["ResidencyCountyID"].ToString();

あなたの編集に応じて:ドキュメントによると:

現在選択されている行によって、エディターの編集値と表示テキストの値が決まります。BaseEdit.EditValueの値は、RepositoryItemLookUpEditBase.ValueMemberフィールドから取得され、編集ボックスに表示されるテキストは、選択した行のRepositoryItemLookUpEditBase.DisplayMemberフィールドから取得されます。

BaseEdit.EditValueを変更すると、エディターは、R​​epositoryItemLookUpEditBase.ValueMemberフィールドに新しい値が含まれている行を見つけて選択します。編集ボックスのテキストは、新しく選択された行を反映するように変更されます。

私はこれらのコントロールを使用していませんが、あなたが説明したように機能してはいけないように思えます。EditValueはオブジェクトを受け入れるため、ToString()が問題であると思います。そのため、おそらく値にintが必要です。試す:

lkuResidenceCounty.EditValue = (int)row["ResidencyCountyID"];
于 2009-06-19T13:13:26.940 に答える
1

ValueMemberプロパティは、Valueプロパティを設定するときにプルするフィールドをリストに指示します。ValueMemberを"CountyID"に設定すると、リストがDataboundの場合、すべてのリストアイテムの値プロパティがそれらのオブジェクトのCountyIDフィールドに設定されます。

したがって、次のことを行うべきではありません。

lkuResidenceCounty.Properties.ValueMember = row["ResidencyCountyID"].ToString();

むしろ

lkuResidenceCounty.Properties.ValueMember = "CountyID";

データバインドしようとしているフィールドを正しく識別している限り、問題はありませんでした。リストのデータがバインドされると、期待する結果が表示されます。

ただし、コードを確認したところ、フィールドが一致していないようです。ある場所ではResidencyCountyIDを使用しており、別の場所ではCountyIDを使用しています。それがおそらくあなたの混乱の原因です。実際のフィールド名を把握し、ValueMemberをそれに設定していることを確認してください。

アップデート

コメントを読んだ後、探しているのはSelectedValueプロパティです。SelectedValueプロパティは、選択した値を指定した入力に強制するようにリストに指示します。

基本的に、ここでは2つのことが起こっています。ValueMemberは、データソースからの値として何を使用するかをリストに指示し、SelectedValueは、現在選択されている値をリストに指示します。

于 2009-06-16T16:36:23.627 に答える
1

2つのバリューメンバーを持つために同じLookUpEditが必要なのはなぜですか?スタンドアロンで使用されていますか、それともグリッドで使用されていますか?スタンドアロンの場合、現在の行に応じて2つのリポジトリエディタを入れ替えることができます。しかし、ValueMemberには2つ以上の可能な値がありますか?それはまた物事を複雑にするでしょう。

アップデート

あなたの編集を見て、私はもう少し何が起こっているのか理解していると思います。したがって、ValueMember(データ列を参照)を変更するのではなく、エディターの値を変更する必要がありますか?もしそうなら、あなたは間違いなくEditValue(SelectedTextではなく、設定されることを意図しているとは思わない)を使用し、それを次のようにrow["value_field"]に割り当てる必要があります。

lkuResidenceCounty.EditValue = row["ResidencyCountyID"];

あなたがそれをするとどうなりますか?

于 2009-06-19T13:04:56.163 に答える