[ASP.NET] DropDownListにバインド

ASP.NETのWebフォームを使っていると、DropDownListコンポーネントはよく使う。
DropDownListには、いくつかデータのセット方法がある。

直接aspxファイル上に書く

変わらない値なら、これで十分。

       <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クラスを追加する

コード側で、ちゃちゃっと追加する場合などに。

        //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に入る。)

        //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も同じ値になる。

        //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で取得したテーブルをバインドするときに使える。

        //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コレクションに入っているクラスのプロパティをバインドできる。

        //クラスの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();
    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もほぼ同じ。

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>