WinFormでのcomboBoxコントロールのデータバインド

6276 ワード

http://www.cnblogs.com/peterzb/archive/2009/05/30/1491923.html
次に、汎用IListとDictionary、データセットDataTableの3つのcomboBoxバインド方法について説明します.
一、IList
リストセットを直接作成し、バインドします.
WinForm 中 comboBox控件之数据绑定

View Code
       IList<
string> list = 
new List<
string>();
            list.Add(
"
111111
");
            list.Add(
"
222222
");
            list.Add(
"
333333
");
            list.Add(
"
444444
");
            comboBox1.DataSource = list;
実行すると、バインドが成功したことがわかりますが、一般的にドロップダウンボックスのバインドには値があり、表示されている内容があります.このとき、listのタイプとしてvalueとtextをカプセル化するクラスを作成することができます.
    
 
public 
class Info
    {
        
public 
string Id { 
get; 
set; }
        
public 
string Name { 
get; 
set; }
    }
      private void bindCbox()
        {
            IList infoList = 
new List();
            Info info1 = 
new Info() { Id=
"
1
",Name=
"
張三
"};
            Info info2 = 
new Info() { Id=
"
2
",Name=
"
李四
"};
            Info info3 = 
new Info() { Id = 
"
3
",Name = 
"
王五
" };
            infoList.Add(info1);
            infoList.Add(info2);
            infoList.Add(info3);
            comboBox1.DataSource = infoList;
            comboBox1.ValueMember = 
"
Id
";
            comboBox1.DisplayMember = 
"
Name
";
        }
この時、値と表示された内容を直接得ることができます.
 
二、Dictionary
これはちょっと特殊で、直接バインドすることはできません.クラスBindingSourceを借りてバインドを完了する必要があります.
   
WinForm 中 comboBox控件之数据绑定

View Code
   Dictionary<
int, 
string> kvDictonary = 
new Dictionary<
int, 
string>();
            kvDictonary.Add(
1, 
"
11111
");
            kvDictonary.Add(
2, 
"
22222
");
            kvDictonary.Add(
3, 
"
333333
");
            BindingSource bs = 
new BindingSource();
            bs.DataSource = kvDictonary;
            comboBox1.DataSource = bs;
            comboBox1.ValueMember = 
"
Key
";
            comboBox1.DisplayMember = 
"
Value
";
 
三、データセット
これはよくあるもので、簡単です.
    
WinForm 中 comboBox控件之数据绑定

View Code
      
//
データセットバインド
        
private 
void BindCombox()
        {
            DataTable dt = 
new DataTable();
            DataColumn dc1 = 
new DataColumn(
"
id
");
            DataColumn dc2 = 
new DataColumn(
"
name
");
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            DataRow dr1 = dt.NewRow();
            dr1[
"
id
"] = 
"
1
";
            dr1[
"
name
"] = 
"
aaaaaa
";
            DataRow dr2 = dt.NewRow();
            dr2[
"
id
"] = 
"
2
";
            dr2[
"
name
"] = 
"
bbbbbb
";
            dt.Rows.Add(dr1);
            dt.Rows.Add(dr2);
            comboBox1.DataSource = dt;
            comboBox1.ValueMember = 
"
id
";
            comboBox1.DisplayMember = 
"
name
";
        }
注意:
comboxのSelectedIndex Changedのイベントをトリガーすると、フォームをロードするときに実行されます.この点は私も最初は魅惑的で、エラーが発生しやすいので、変数fig=falseを定義できるなど、実行を避ける方法があります.
     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            if(this.fig)

            {

                string selectValue = this.cmbAddMember.SelectedValue.ToString();



                rtbaddMember.SelectedText = selectValue;

            }

        }


フォームをロードした後に実行したいに違いないので、フォームをロードした後にfigの値をtrueに設定します.
   
   private void SetAutoMessage_Load(object sender, EventArgs e)

        {

            loadCombox();

            loadMessageTemplet();

            fig= true;

        }