Desejo definir DataTextField
e DataValueField
de a Dropdownlist
(languageList) usando um Dicionário (lista) de languageCod
(en-gb) como chave e o nome do idioma (inglês) como o texto a ser exibido.
Código Relevante:
string[] languageCodsList= service.LanguagesAvailable();
Dictionary<string, string> list =
new Dictionary<string, string>(languageCodsList.Length);
foreach (string cod in languageCodsList)
{
CultureInfo cul = new CultureInfo(cod);
list.Add(cod, cul.DisplayName);
}
languageList.DataSource = list;
languageList.DataBind();
Como posso definir DataTextField
e DataValueField
?
c#
dictionary
drop-down-menu
VansFannel
fonte
fonte
Dictionary<TKey, TValue>
, mas talvez umList<T>
.Quando um dicionário é enumerado, ele produzirá
KeyValuePair<TKey,TValue>
objetos ... então você só precisa especificar "Valor" e "Chave" paraDataTextField
eDataValueField
, respectivamente, para selecionar as propriedades Valor / Chave .Graças ao comentário de Joe, reli a pergunta para entendê-la da maneira certa. Normalmente, eu esperaria que a "chave" no dicionário fosse o texto exibido e o "valor" fosse o valor obtido. No entanto, seu código de amostra os usa ao contrário. A menos que você realmente precise que eles sejam assim, considere escrever seu código como:
(E depois alterando a vinculação para usar "Chave"
DataTextField
e "Valor"DataValueField
, é claro.)Na verdade, eu sugeriria que, como parece que você realmente quer uma lista em vez de um dicionário, você pode querer reconsiderar o uso de um dicionário em primeiro lugar. Você pode simplesmente usar um
List<KeyValuePair<string, string>>
:Como alternativa, use uma lista de
CultureInfo
valores simples . LINQ torna isso realmente fácil:Se você não estiver usando o LINQ, ainda poderá usar um loop foreach normal:
fonte
Se o DropDownList for declarado em sua página aspx e não no codebehind, você pode fazer assim.
.aspx:
.aspx.cs:
fonte
Basta usar "Chave" e "Valor"
fonte