Cuando un diccionario se enumera, se rendirá KeyValuePair<TKey,TValue>
objetos ... por lo que sólo tiene que especificar "Valor" y "clave" para DataTextField
y DataValueField
respectivamente, para seleccionar los Value/Key propiedades.
Gracias al comentario de Joe, volví a leer la pregunta para obtener estos en el camino correcto. Normalmente esperaría que la "clave" en el diccionario sea el texto que se muestra, y el "valor" sea el valor obtenido. Sin embargo, su código de muestra los usa al revés. A menos que realmente los necesita a ser de esta manera, es posible que desee considerar la posibilidad de escribir el código como:
(Y entonces el cambio de la unión a utilizar "clave" para DataTextField
y "Valor" para DataValueField
, por supuesto.)
De hecho, sugiero que, como parece que realmente quieres una lista de en lugar de un diccionario, es posible que quieras reconsiderar el uso de un diccionario en primer lugar. Se podía usar un List<KeyValuePair<string, string>>
:
string[] languageCodsList = service.LanguagesAvailable();
var list = new List<KeyValuePair<string, string>>();
foreach (string cod in languageCodsList)
{
CultureInfo cul = new CultureInfo(cod);
list.Add(new KeyValuePair<string, string>(cul.DisplayName, cod));
}
alternativa, puede utilizar una lista de valores de fricción CultureInfo
. LINQ lo hace muy fácil:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Si no se está usando LINQ, todavía se puede utilizar un foreach rizo:
List<CultureInfo> cultures = new List<CultureInfo>();
foreach (string cod in service.LanguagesAvailable())
{
cultures.Add(new CultureInfo(cod));
}
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Recomendaría establecer TextField en "clave" y ValueField en Value. Creo que eso es más intuitivo. – MGOwen
@MGOwen Puede parecerle intuitivo establecer DataValueField en Valor, debido al "Valor" común, pero en realidad es ilógico en el uso regular de la estructura de datos/control. Para detalles sobre esto, vea mi comentario sobre la respuesta de Jon Skeet. – Dani
No veo una lista.Agregar eso toma 2 argumentos ... solo uno que toma una arg. es esto winforms? – hrh