DropdownListがあり、そのデータソースが文字列のリストであるとします。DataValueをリスト内の要素のインデックスにします。
これを行う方法はありますか?
ありがとう
計算ではなく、バインドする値が必要です。これは、強力なクラスを使用して事前に行うか、次の例では、すばやく簡単に匿名タイプを使用して行います。
List<string> ds = yourlist;
ddl.DataSource = yourlist
.Select(s => new
{
Text = s,
Value = yourlist.IndexOf(s)
})
.ToList();
ddl.DataValueField = "Value";
ddl.DataTextField = "Text";
ddl.DataBind();
Flemのソリューションと非常に似ていますが、より単純です。Select
メソッドのオーバーロードを1つ使用し、現在item
の次index
に渡されます。
ddl.DataSource = arrayOfStrings.Select((text, index) => new { text, index })
.ToList();
ddl.DataValueField = "index";
ddl.DataTextField = "text";
ddl.DataBind();
データテキストと値のフィールドをデータセットの特定の列に設定していることに注意してください。
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString);
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand("Select * from country", cn);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(ds);
Dropdownlist1.DataSource = ds;
Dropdownlist1.DataTextField = "CountryName";
Dropdownlist1.DataValueField = IndexOf("CountryID");
Dropdownlist1.DataBind();