4

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

我想调用下面的函数作为初始化 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

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

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

看看MSDNSystem.Collections.Generic.Dictionary<TKey, TValue>.

于 2013-03-27T10:16:40.273 回答