C# dropdownlist는 DataSource로 사전을 가진 DropdownList입니다
-
03-07-2019 - |
문제
나는 설정하고 싶다 DataTextField
그리고 DataValueField
a Dropdownlist
(Languagelist) 사전 사용 (목록) languageCod
(en-gb) 키 및 언어 이름 (영어)으로 표시 할 텍스트로 표시됩니다.
관련 코드 :
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();
어떻게 설정할 수 있습니까? DataTextField
그리고 DataValueField
?
해결책
이와 같이 "키"및 "value"텍스트를 사용하여 DROPDOWNLIST의 DATATEXTFIELD 및 DATAVALUEFIELD를 설정할 수 있습니다.
Dictionary<string, string> list = new Dictionary<string, string>();
list.Add("item 1", "Item 1");
list.Add("item 2", "Item 2");
list.Add("item 3", "Item 3");
list.Add("item 4", "Item 4");
ddl.DataSource = list;
ddl.DataTextField = "Value";
ddl.DataValueField = "Key";
ddl.DataBind();
다른 팁
사전이 열거되면 생성됩니다 KeyValuePair<TKey,TValue>
개체 ... 따라서 "값"및 "키"를 지정하면됩니다. DataTextField
그리고 DataValueField
각각을 선택합니다 값/열쇠 속성.
Joe의 의견 덕분에 나는 이것들을 올바른 길로 만들기 위해 질문을 다시 읽습니다. 일반적으로 사전의 "키"가 표시되는 텍스트가 될 것으로 예상하고 "값"은 가져온 값이 될 것으로 기대합니다. 당신의 샘플 코드는 다른 방식으로 그것들을 사용합니다. 실제로 이런 식으로 필요하지 않으면 코드를 작성하는 것을 고려할 수 있습니다.
list.Add(cul.DisplayName, cod);
(그리고 "키"를 사용하도록 바인딩을 변경합니다. DataTextField
그리고 "가치" DataValueField
, 물론이야.)
사실, 나는 당신이 정말로 원한다고 생각합니다. 목록 사전이 아니라 사전을 사용하여 처음에 사전을 재고 할 수 있습니다. 당신은 그냥 사용할 수 있습니다 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));
}
또는 평원 목록을 사용하십시오 CultureInfo
가치. LINQ는 이것을 정말 쉽게 만듭니다.
var cultures = service.LanguagesAvailable()
.Select(language => new CultureInfo(language));
languageList.DataTextField = "DisplayName";
languageList.DataValueField = "Name";
languageList.DataSource = cultures;
languageList.DataBind();
LINQ를 사용하지 않는 경우에도 여전히 일반적인 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();
DropdownList가 CodeBehind가 아닌 ASPX 페이지에 선언 된 경우 이렇게 할 수 있습니다.
.aspx :
<asp:DropDownList ID="ddlStatus" runat="server" DataSource="<%# Statuses %>"
DataValueField="Key" DataTextField="Value"></asp:DropDownList>
.aspx.cs :
protected void Page_Load(object sender, EventArgs e)
{
ddlStatus.DataBind();
// or use Page.DataBind() to bind everything
}
public Dictionary<int, string> Statuses
{
get
{
// do database/webservice lookup here to populate Dictionary
}
};
"키"와 "value"만 사용하십시오.