質問

キーとしてDataTextField(en-gb)の辞書(リスト)を使用し、表示するテキストとして言語名(english)を使用して、DataValueField(languageList)のDropdownlistおよびlanguageCodを設定したい。

関連コード:

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();

<=>および<=>を設定するにはどうすればよいですか

役に立ちましたか?

解決

<!> quot; Key <!> quot;を使用して、DropDownListのDataTextFieldとDataValueFieldを設定できるようにします。および<!> quot; Value <!> quot;テキスト:

    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> が生成されます。オブジェクト... <!> quot; Value <!> quot;を指定するだけです。および<!> quot; Key <!> quot; DataTextFieldおよびDataValueFieldのそれぞれについて、 /を選択します。 キーのプロパティ。

Joeのコメントのおかげで、質問を読み直して、これらを正しく理解することができました。通常、<!> quot; key <!> quot;を期待します。ディクショナリ内で表示されるテキスト、および<!> quot; value <!> quot;取得した値になります。ただし、サンプルコードではそれらを逆方向に使用しています。本当にこのようにする必要がない限り、次のようにコードを書くことを検討してください。

list.Add(cul.DisplayName, cod);

(そして、バインディングを変更して<!> quot; Key <!> quot;を使用してList<KeyValuePair<string, string>>および<!> quot; Value <!> quot;もちろんCultureInfoを使用します。)

実際、辞書ではなくリストが本当に必要なように思えるので、そもそも辞書の使用を再検討することをお勧めします。単に<=>:

を使用できます
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));
}

代わりに、プレーンな<=>値のリストを使用します。 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がコードビハインドではなく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
    }
};

<!> quot; Key <!> quot;を使用するだけです。および<!> quot; Value <!> quot;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top