WinFormでのcomboBoxコントロールのデータバインド
6276 ワード
http://www.cnblogs.com/peterzb/archive/2009/05/30/1491923.html
次に、汎用IListとDictionary、データセットDataTableの3つのcomboBoxバインド方法について説明します.
一、IList
リストセットを直接作成し、バインドします.
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を借りてバインドを完了する必要があります.
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
";
三、データセット
これはよくあるもので、簡単です.
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を定義できるなど、実行を避ける方法があります.
フォームをロードした後に実行したいに違いないので、フォームをロードした後にfigの値をtrueに設定します.
次に、汎用IListとDictionary、データセットDataTableの3つのcomboBoxバインド方法について説明します.
一、IList
リストセットを直接作成し、バインドします.
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
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を借りてバインドを完了する必要があります.
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
";
三、データセット
これはよくあるもので、簡単です.
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;
}