ASP.NETのWebフォームを使っていると、DropDownListコンポーネントはよく使う。
DropDownListには、いくつかデータのセット方法がある。
直接aspxファイル上に書く
変わらない値なら、これで十分。
1 2 3 4 5 |
<asp:DropDownList ID="DropDownList0" runat="server"> <asp:ListItem Value="4">April</asp:ListItem> <asp:ListItem Value="5">May</asp:ListItem> <asp:ListItem Value="6">June</asp:ListItem> </asp:DropDownList> |
ListItemクラスを追加する
コード側で、ちゃちゃっと追加する場合などに。
1 2 3 4 5 |
//ListItemを追加 this.DropDownList1.Items.Clear(); this.DropDownList1.Items.Add(new ListItem("4月", "4")); this.DropDownList1.Items.Add(new ListItem("5月", "5")); this.DropDownList1.Items.Add(new ListItem("6月", "6")); |
バインド(Bind)する
そして、データバインド機能。
DictionaryをBind
キー、バリューな、DictinaryにはDropDownListは相性がいい気がする。
DataTextFiledとDataValueFieldに、Dicionaryの中身であるKeyValuePairのプロパティ名を入れる。
(入れない場合、[卯月,4] といった感じでセットでTextとValueに入る。)
1 2 3 4 5 6 7 8 9 10 |
//DictionaryをBind var dic = new Dictionary<string,int>(); dic.Add("卯月", 4); dic.Add("皐月", 5); dic.Add("水無月", 6); this.DropDownList2.DataSource = dic; this.DropDownList2.DataTextField = "Key"; this.DropDownList2.DataValueField = "Value"; this.DropDownList2.DataBind(); |
ListをBind
Listもバインドできる。ちなみに、TextもValueも同じ値になる。
1 2 3 4 5 6 7 8 |
//ListをBind var list = new List<String>(); list.Add("April"); list.Add("May"); list.Add("June"); this.DropDownList3.DataSource = list; this.DropDownList3.DataBind(); |
DataTableをバインド
例では、その場でDataTable作ってるけど、SQLで取得したテーブルをバインドするときに使える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//DataTableをバインド var dt = new DataTable(); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("age", typeof(int)); var newRow = dt.NewRow(); newRow["name"] = "yamada"; newRow["age"] = 20; dt.Rows.Add(newRow); newRow = dt.NewRow(); newRow["name"] = "suzuki"; newRow["age"] = 25; dt.Rows.Add(newRow); this.DropDownList5.DataSource = dt; this.DropDownList5.DataTextField = "name"; this.DropDownList5.DataValueField = "age"; this.DropDownList5.DataBind(); |
クラスのListをBind
さらに、自前で作ったクラスにプロパティがあれば、Listコレクションに入っているクラスのプロパティをバインドできる。
1 2 3 4 5 6 7 8 9 10 |
//クラスのListをBind var userList = new List<MyUser>(); userList.Add(new MyUser("yamada", 18)); userList.Add(new MyUser("suzuki", 21)); userList.Add(new MyUser("satou", 32)); this.DropDownList4.DataSource = userList; this.DropDownList4.DataTextField = "Name"; this.DropDownList4.DataValueField = "Age"; this.DropDownList4.DataBind(); |
1 2 3 4 5 6 7 8 9 10 11 12 |
class MyUser { //自動プロパティ public String Name { get; set; } public int Age { get; set; } public MyUser(String name, int age) { this.Name = name; this.Age = age; } } |
例ではC#だが、VB.NETもほぼ同じ。