2013-03-27 180 views
4

我有一个填充了KeyValuePairs(equalityMap)的字典,我用它来填充组合框(comBox1)。C#在清除/设置为空后重新填充字典

我想调用下面的函数作为初始化comBox1的一部分。然后,我从另一个ComboBox(comBox2)中获取selectedValueChanged事件,该事件调用以下函数,并根据comBox2的选定值的类型更改comBox1的内容。

当首次初始化平等组合框时,所有内容都按预期工作。但是,当再次调用该功能时,不是仅显示组合框中的“键”,而是以格式[“键”,“值”]显示“键”和“值”。

I我只是刚刚开始使用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"; 
+0

请提供您的'equalityMap'声明。 – 2013-03-27 10:28:08

+0

假设'equalities'是一个标准组合框控件,您的确切代码,我无法重现您的问题。是否还有其他可能影响解决方案的相关代码? – 2013-03-27 10:49:04

+0

第一次填充组合框之后调用的唯一代码就是上面的事件和popEqualities函数。 – 2013-03-27 11:05:55

回答

0

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

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

看看MSDN和方法/属性System.Collections.Generic.Dictionary<TKey, TValue>

+0

我以为多数民众赞成在这两行是在做什么 - this.equalities.DisplayMember =“Key”; this.equalities.ValueMember =“Value”; 正如我所说,它首次调用此函数时有效。 – 2013-03-27 10:21:54

+0

请显示您的事件以及用事件和声明更新的equalityMap – 2013-03-27 10:39:01

+0

的定义 – 2013-03-27 10:49:50