Quando un dizionario è enumerato, sarà resa KeyValuePair<TKey,TValue>
oggetti ... quindi è solo bisogno di specificare "Valore" e "Key" per DataTextField
e DataValueField
, rispettivamente, per selezionare i Value/Key proprietà.
Grazie al commento di Joe, ho riletto la domanda per ottenerli nel modo giusto. Normalmente mi aspetterei che la "chiave" nel dizionario sia il testo che viene visualizzato e che il "valore" sia il valore recuperato. Il tuo codice di esempio li usa al contrario. A meno che non si ha realmente bisogno loro di essere in questo modo, si potrebbe prendere in considerazione la scrittura del codice come:
(E poi cambiando il legame di usare "chiave" per DataTextField
e "Valore" per DataValueField
, naturalmente.
In effetti, suggerirei che come sembra davvero che tu voglia un elenco anziché un dizionario, potresti voler riconsiderare l'uso di un dizionario in primo luogo. Si potrebbe utilizzare 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, utilizzare un elenco di semplici CultureInfo
valori. LINQ rende il tutto veramente facile:
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
Se non stai usando LINQ, è comunque possibile utilizzare un normale ciclo foreach:
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();
Consiglierei l'impostazione di TextField su "chiave" e Valore campo su Valore. Penso che sia più intuitivo. – MGOwen
@ MGOwen Può essere _seem_ intuitivo impostare DataValueField su Valore, a causa del comune "Valore", ma in realtà è illogico nell'uso regolare della struttura dati/controllo. Per i dettagli su questo, vedere il mio commento sulla risposta di Jon Skeet. – Dani
Non vedo un elenco. Aggiungi che richiede 2 arg .. solo uno che prende un arg. è questa winforms ?? – hrh