我有一本充满 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";