DataTextField
(en-gb)の辞書(リスト)をキーおよび言語名(英語)として使用して、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();
DataTextField
およびDataValueField
を設定するにはどうすればよいですか?
そのように、「Key」および「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
に「値」と「キー」を指定するだけです。 値 / キー プロパティ。
ジョーのコメントのおかげで、質問を読み直して、これらを正しく実行することができました。通常、辞書の「キー」は表示されるテキストであり、「値」はフェッチされる値であると予想されます。ただし、サンプルコードではそれらを逆方向に使用しています。これらを本当にこのようにする必要がない限り、コードを次のように書くことを検討してください。
list.Add(cul.DisplayName, cod);
(そしてもちろん、DataTextField
に "Key"を使用し、DataValueField
に "Value"を使用するようにバインディングを変更します。)
実際、辞書ではなくlistが本当に必要だと思われるので、辞書の使用を再検討することをお勧めします最初の場所。単に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がコードビハインドではなく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
}
};
「キー」と「値」を使用するだけです