0

この質問は、数人から 100 回質問され、回答されています。ただし、まだ問題があるようです。データベース内の整数である列への DataBinding を持つ ComboBox があります。ComboBox DataSource を設定する Dictionary クラスがあります。フォームを実行すると、コンボボックスに何も表示されないか、辞書の「テキスト」ではなく、データベースの整数値が表示されます。フォームがどのように見えるかの写真を添付し​​ました。

コンボボックスの表示

この ComboBox を生成するために使用されるコードは次のとおりです。

   public static SortedDictionary<int, string> SecurityCodes()
    {
        SortedDictionary<int, string> SecurityCodes = new SortedDictionary<int, string>
            {
                {1, "View only"},
                {3, "Print reports"},
                {4, "Post changes"},
                {5, "Edit records"},
                {6, "Revise postings"},
                {7, "Add records"},
                {8, "Remove postings"},
                {9, "Supervisor"},
                {10, "Programmer"}
            };

        return SecurityCodes;
    }


        this.cboSecurity.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.loginInfoBindingSource, "Security_Level", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));

        this.cboSecurity.DataSource = new BindingSource(BaseDictionaries.SecurityCodes(), null);
        this.cboSecurity.DisplayMember = "Value";
        this.cboSecurity.ValueMember = "Key";

ここで、DataBinding を「Text」ではなく「ValueMember」に変更すると、テキストは表示されますが、別のレコードに移動しても更新されず、常に Dictionary の最初の項目に残ります。DataBinding を、ディクショナリにあるものと一致するエントリを持つビューに変更すると、DataBinding が "Text" に設定された適切な "Text" が ComboBox に表示されます。それは問題ありませんが、これらのエントリだけでデータベース内のテーブルを維持する必要があり、そのルートには行きたくありません。

誰かが私が間違ったことを見ることができますか?

以下を含むさまざまな種類の DataSource の組み合わせを試しましたが、動作は変わりません。

        SortedDictionary<int, string> loDataSource = BaseDictionaries.SecurityCodes();
        KeyValuePair<int, string>[] kvp = new KeyValuePair<int,string>[loDataSource.Count];
        loDataSource.CopyTo(kvp,0);
        new BindingSource(kvp, "Key");
        this.cboSecurity.DataSource = kvp;
4

1 に答える 1

0

「テキスト」値を使用することによってのみ、これを機能させることができました。「SelectedValue」と「ValueMember」を試しても問題は解決しません。時間があり、これを理解したら、別の回答を投稿します。

于 2012-12-12T23:35:46.370 に答える