清除/设置为空后,C#重新填充字典

时间:2013-03-27 10:11:34

标签: c# dictionary combobox datasource keyvaluepair

我有一个字典填充了KeyValuePairs(equalityMap),我用它来填充组合框(comBox1)。

我想调用下面的函数作为初始化comBox1的一部分。然后,我有来自另一个组合框(comBox2)的selectedValueChanged事件,该组件调用下面的函数并根据comBox2选定值的类型更改comBox1的内容。

首次初始化均衡组合框时,一切都按预期工作。但是,当再次调用此函数时,它不会仅显示组合框中显示的“键”,而是以[“key”,“value”]格式显示“键”和“值”

我刚刚开始使用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);
    }

这里有几张照片可以展示这个问题 在初次通话

initial call

在后续通话中

subsequent calls

修正:

事实证明,当我重新绑定DataSource时,每次都清除DisplayMember属性 -

this.equalities.DisplayMember = "Key";

当您移动将数据源重新绑定到这些分配之上的行时,它可以解决问题。

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

1 个答案:

答案 0 :(得分:0)

System.Collections.Generic.Dictionary中的条目包含属性KeyValue以显示内容。如果您只显示一个条目,则隐式使用ToString() - 方法,该方法将条目的内容显示为["key", "value"]

如果您只想显示密钥,则必须使用Key - 属性并将其打印出来。

查看MSDN以及System.Collections.Generic.Dictionary<TKey, TValue>的方法/属性。