문제

나는 설정하고 싶다 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"만 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top