4

コンボボックス (comBox1) に入力するために使用している KeyValuePairs (equalityMap) で満たされた辞書を取得しました。

comBox1 の初期化の一環として、以下の関数を呼び出したいと思います。次に、別のコンボボックス (comBox2) から selectedValueChanged イベントを作成します。このイベントは、以下の関数を呼び出し、comBox2 の選択値のタイプに基づいて comBox1 のコンテンツを変更します。

等値コンボボックスが最初に初期化されたとき、すべてが期待どおりに機能しています。ただし、この関数が再度呼び出されると、コンボボックスに「キー」が表示される代わりに、[「キー」、「値」] の形式で「キー」と「値」が表示されます。

私はC#(またはGUIを備えたもの)を始めたばかりなので、このようなものをデバッグする最良の方法がわかりません. どんな助けでも感謝します。

public void popEqualities(String fieldType)
    {

        this.equalities.DataSource = null;
        this.equalities.Items.Clear();
        this.equalityMap.Clear();

        if (fieldType == "string")
        {
            equalityMap.Add("is", "=");
            equalityMap.Add("is not", "!=");
            equalityMap.Add("contains", "CONTAINS");
            equalityMap.Add("begins with", "LIKE '%");
        }
        else if (fieldType == "int")
        {
            equalityMap.Add("is equal to", "=");
            equalityMap.Add("is not equal to", "!=");
            equalityMap.Add("is greater than", ">");
            equalityMap.Add("is less than", "<");
        }
        else if (fieldType == "date")
        {
            equalityMap.Add("is", "=");
            equalityMap.Add("is not", "!=");
            equalityMap.Add("is after", ">");
            equalityMap.Add("is before", "<");
        }
        else if (fieldType == "boolean")
        {
            equalityMap.Add("is", "=");
        }
        else
        {
            MessageBox.Show("Recieved bad Field Type");
            return;
        }

        this.equalities.DisplayMember = "Key";
        this.equalities.ValueMember = "Value";
        this.equalities.DataSource = new BindingSource(equalityMap, null);
    }  

編集:エクイティマップを宣言するには、私は呼び出します

this.equalityMap = new Dictionary<string, string>();

クラスコンストラクターで、クラスのプライベートメンバーとして次のものを持っています。

private Dictionary<string, string> equalityMap

この関数を呼び出すイベントは単純です

public void searchFieldChanged(object sender, EventArgs e)
    {
        string fieldType = getFieldType();
        popEqualities(fieldType);
    }

ここに問題を示すための写真がいくつかあります 最初の電話で

最初の呼び出し.

後続の呼び出しで

後続の呼び出し.

修理済み:

DataSource を再バインドしていたときに、毎回 DisplayMember プロパティをクリアしていたことがわかりました -

this.equalities.DisplayMember = "Key";

データソースを再バインドする行をこれらの割り当ての上に移動すると、問題が修正されます。

this.equalities.DataSource = new BindingSource(equalityMap, null);
this.equalities.DisplayMember = "Key";
this.equalities.ValueMember = "Value";
4

1 に答える 1

0

のエントリにSystem.Collections.Generic.Dictionaryはプロパティが含まれ、内容KeyValue表示します。エントリを表示するだけの場合はToString()、エントリの内容を として表示する- メソッドを暗黙的に使用していることになります["key", "value"]

キーのみを表示したい場合は、Key-property を使用してこれを出力する必要があります。

MSDNと のメソッド/プロパティを見てくださいSystem.Collections.Generic.Dictionary<TKey, TValue>

于 2013-03-27T10:16:40.273 に答える