我有一个字典填充了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);
}
这里有几张照片可以展示这个问题 在初次通话
在后续通话中
修正:
事实证明,当我重新绑定DataSource时,每次都清除DisplayMember属性 -
this.equalities.DisplayMember = "Key";
当您移动将数据源重新绑定到这些分配之上的行时,它可以解决问题。
this.equalities.DataSource = new BindingSource(equalityMap, null);
this.equalities.DisplayMember = "Key";
this.equalities.ValueMember = "Value";
答案 0 :(得分:0)
System.Collections.Generic.Dictionary
中的条目包含属性Key
和Value
以显示内容。如果您只显示一个条目,则隐式使用ToString()
- 方法,该方法将条目的内容显示为["key", "value"]
。
如果您只想显示密钥,则必须使用Key
- 属性并将其打印出来。
查看MSDN以及System.Collections.Generic.Dictionary<TKey, TValue>
的方法/属性。