我有一个填充KeyValuePairs(equalityMap)的字典,我正在使用它来填充组合框(comBox1)。
我想在初始化comBox1时调用下面的函数。然后,我有一个selectedValueChanged事件来自另一个组合框(comBox2),它调用下面的函数并根据comBox2的选定值更改comBox1的内容。
当等式组合框首次初始化时,一切都按预期工作。但是,当再次调用此函数时,组合框中显示的不仅是“键”,而且还以["键","值"]的格式显示“键”和“值”。
我刚刚开始学习c#(或任何带GUI的东西),因此不确定调试此类问题的最佳方法。感谢您的帮助。
在类构造函数中,将以下内容作为类的私有成员。
调用此函数的事件很简单。
这里有几张图片展示了问题:
在初始调用时,如下图所示:
。
在随后的调用中,如下图所示:
。
解决方法是重新绑定数据源时会每次清除DisplayMember属性。
当您将重新绑定数据源的行移动到这些赋值之上时,它会解决问题。
我想在初始化comBox1时调用下面的函数。然后,我有一个selectedValueChanged事件来自另一个组合框(comBox2),它调用下面的函数并根据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);
}
这里有几张图片展示了问题:
在初始调用时,如下图所示:
![initial call](https://i.imgur.com/YYccu5I.png)
在随后的调用中,如下图所示:
![subsequent calls](https://i.imgur.com/1QeBxY4.png)
解决方法是重新绑定数据源时会每次清除DisplayMember属性。
this.equalities.DisplayMember = "Key";
当您将重新绑定数据源的行移动到这些赋值之上时,它会解决问题。
this.equalities.DataSource = new BindingSource(equalityMap, null);
this.equalities.DisplayMember = "Key";
this.equalities.ValueMember = "Value";
equalityMap
声明。 - Rob Epsteinequalities
是一个标准的ComboBox控件,我无法重现您的问题。您能否提供其他相关的代码,可能会影响解决方案? - Rob EpsteinequalitiesMap
列表,以基于具有名称、运算符和类型的结构体,然后在您的searchFieldChanged
函数中设置DataSource = equalitiesMap.Where(x => x.Type == getFieldType())
。同时将您的DisplayMember更改为Name,ValueMember更改为Operator。 - Rob Epstein