programar item example como añadir c# dictionary combobox datasource keyvaluepair

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> .