item - C#Re-poblando el diccionario después de borrarlo/configurarlo como nulo
item combobox c# (1)
Tengo un diccionario lleno de KeyValuePairs (equalityMap) que estoy usando para rellenar un cuadro combinado (comBox1).
Quiero llamar a la siguiente función como parte de la inicialización de comBox1. Luego, tengo un evento seleccionado ValuesChanged de otro cuadro combinado (comBox2) que llama a la función siguiente y cambia el contenido de comBox1 según el tipo de valor seleccionado de comBox2.
Todo funciona como se espera cuando se inicializa por primera vez el cuadro combinado de igualdades. Sin embargo, cuando se llama de nuevo a esta función, en lugar de mostrar solo la "clave" en el cuadro combinado, muestra la "clave" y el "valor" en el formato ["clave", "valor"]
Acabo de comenzar con c # (o cualquier cosa con una GUI) tan inseguro de la mejor manera de depurar algo como esto. Cualquier ayuda apreciada.
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);
}
EDITAR: Para declarar equidad mapa llamo
this.equalityMap = new Dictionary<string, string>();
en el constructor de clase y tiene lo siguiente como miembro privado de la clase.
private Dictionary<string, string> equalityMap
El evento que llama a esta función es simplemente
public void searchFieldChanged(object sender, EventArgs e)
{
string fieldType = getFieldType();
popEqualities(fieldType);
}
Aquí hay un par de fotos para mostrar el problema En la llamada inicial
.
En llamadas posteriores
.
Fijo:
Resulta que cuando volví a vincular el DataSource estaba borrando la propiedad DisplayMember cada vez que
this.equalities.DisplayMember = "Key";
Cuando mueve la línea que vuelve a enlazar el origen de datos por encima de estas asignaciones, soluciona el problema.
this.equalities.DataSource = new BindingSource(equalityMap, null);
this.equalities.DisplayMember = "Key";
this.equalities.ValueMember = "Value";
Una entrada en System.Collections.Generic.Dictionary
contiene las propiedades Key
y Value
para mostrar los contenidos. Si solo muestra una entrada, está implícitamente utilizando el método ToString()
, que mostrará el contenido de la entrada como ["key", "value"]
.
Si solo desea mostrar las claves, debe usar Key
property e imprimir esto.
Eche un vistazo a MSDN y los métodos / propiedades de System.Collections.Generic.Dictionary<TKey, TValue>
.