來自:http://blog.sina.com.cn/s/blog_5fb9e26301013wga.html
C# WinForm 中ComboBox數據綁定的問題
怎樣讓WinForm中的ComboBox顯示表中的一個字段,同時又綁定另一個字段?
在Web中的ComboBox這樣寫可以綁定兩個值:
this.ComboBox1.DataTextField="B000602";//顯示中文,方便用戶選擇
this.ComboBox1.DataValueField="B000601";//綁定與選擇對應的另一個值
this.ComboBox1.DataBind();
但是在WinForm程序中該怎么寫啊?
0******************************************************************
DataSet ds = new DataSet();//這個DataSet是你從數據庫里取出來的值
string[] arr = new string[ds.Tables[0].Rows.Count];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = ds.Tables[0].Rows[i][2].ToString();
}
textBox1.AutoCompleteCustomSource.AddRange(arr);
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
1.*******************************************************************
假設combobox綁定的列表為DataSet2的ListTable表(含有ListID, ListName字段),需要綁定的記錄字段為DataSet1的Table1表的ListID字段
combobox.DataSource = dataset2.Tables["ListTable"];
combobox.DisplayMember = "ListName";
combobox.ValueMember = "ListID";
combobox.DataBindings.Add("SelectedValue", dataset1, "Table1.ListID");
2.*****************************************************************
//dt為數據表,ID,Name為dt的兩個字段:
comboBox1.DataSource = dt ;
comboBox1.ValueMember ="ID";
comboBox1.DisplayMember ="Name";
3.******************************************************************
SqlConnection con = new SqlConnection("server=192.168.2.198;uid=sa;pwd=sa;database=northwind");
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "Select * from Customers where country='USA'";
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
DataSet ds = new DataSet();
adp.Fill(ds, "Customers");
comboBox1.DataSource = ds.Tables["Customers"];
comboBox1.DisplayMember = "CompanyName";
comboBox1.ValueMember = "CompanyName";
++++++++++++++++或者++++++++++++++++++++++
SqlConnection con = new SqlConnection("server=192.168.2.198;uid=sa;pwd=sa;database=northwind");
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "Select * from Customers where country='USA'";
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
DataSet ds = new DataSet();
adp.Fill(ds, "Customers");
comboBox1.DataSource = ds;
comboBox1.DisplayMember = "Customers.CompanyName";
comboBox1.ValueMember = "Customers.CompanyName";
++++++++++++往DataGrid里添加下拉列表++++++++++++
DataGridTableStyle dgt = new DataGridTableStyle();
dgt.MappingName = "test";
DataGridTextBoxColumn dgtbc = new DataGridTextBoxColumn();
dgtbc.MappingName = "name";
dgtbc.HeaderText= "name";
ComboBox cmbFunctionArea = new ComboBox();
cmbFunctionArea.DataSource = DtGeneral;
cmbFunctionArea.DisplayMember = "name";
cmbFunctionArea.ValueMember = "value";
cmbFunctionArea.Cursor = Cursors.Arrow;
cmbFunctionArea.DropDownStyle= ComboBoxStyle.DropDownList;
cmbFunctionArea.Dock = DockStyle.Fill;
dgtbc.TextBox.Controls.Add(cmbFunctionArea);
dgt.GridColumnStyles.Add(dgtbc);
cmbFunctionArea.SelectionChangeCommitted +=new EventHandler(cmbFunctionArea_SelectionChangeCommitted);
+++++++++++++修改++++++++++++++++
private void cmbFunctionArea_SelectionChangeCommitted(object sender, EventArgs e)
{
((DataTable)dataGrid1.DataSource).Rows[dataGrid1.CurrentRowIndex][0] = ((ComboBox)sender).Text.ToString();
dataGrid1.SetDataBinding(DtGeneral,null);
}
4.************************************************************************
DataBindings是一般控件所具有的,是綁定數據源的某一個字段
combobox.DataBindings.Add("要綁定控件的屬性如下拉框的SelectedValue\Text", 數據源如dataset1, "導航路徑如Table1.ListID");
但是,DataBindings只能綁定一個字段,而綁定多個字段時典型的如列表控件Combobox、ListBox控件,需要鍵值對,這時就需要指定DataSource(實現IList接口就行),然后指定ValueMember、DisplayMember 。
所以,如果是下拉列表,你只想綁定一個字段,用DataBindings可以,想綁定兩個字段
用combobox.DataSource = 數據源;
combobox.DisplayMember = 對應顯示字段名;
combobox.ValueMember = 對應存儲字段名;
不要同時用
5.*************************************************************************
綁定以后就可以了,讀取選中信息 :
object val = combobox.SelectedValue;
string txt = combobox.Text;
SelectedIndex、SelectedItem表示選中了哪項目,也可以設置combobox.SelectedIndex = 0 或
直接設置 combobox.SelectedValue = "一個已存在的值";或 combobox.Text = "一個已存在的文本";
如果是綁定的,一定要設置的是一個在綁定在已存在的項。
例如有一個部門表的DataTable,部門ID是一個字段,用於唯一標識一個部門ID,部門名稱是另一個字段,用於唯一標識ID對應的部門名稱
綁定如下:
this.ComboBox1.DataSource = 部門表; //只要實現了IList接口就可以
this.ComboBox1.DisplayMember="部門名稱";//顯示中文,方便用戶選擇 對應WebForm的DataTextField
this.ComboBox1.ValueMember="部門ID"; //綁定與選擇對應的另一個值
需要着重說明的時,如果你有一個類Item如有兩個屬性:A、B,同時你做了ItemCollection類用來表示多個Item,綁定時:
this.ComboBox1.DataSource = myItemCollection;
this.ComboBox1.DisplayMember="A";
this.ComboBox1.ValueMember="B";
注意成員一定是屬性名,而不是其它
同樣,數組也是,自己實踐就可明白了!
