當前位置:首頁 > 資訊 > info6 > 正文

C# WinForm 中ComboBox數據綁定的問題

發表于: 2017-02-15   作者:Chen_xiaobao   來源:轉載   瀏覽:
摘要: C#WinForm中ComboBox數據綁定的問題怎樣讓WinForm中的ComboBox顯示表中的一個字段,同時又綁定另一個字段???在Web中的ComboBox這樣寫可以綁定兩個值:??this.ComboBox1.DataTextField="B000602";//顯示中文,方便用戶選擇??this.ComboBox1.DataValueField="B000601";//綁定與選擇對應的另

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";    
   
注意成員一定是屬性名,而不是其它 

C# WinForm 中ComboBox數據綁定的問題

版權所有 IT知識庫 CopyRight ? 2009-2015 IT知識庫 IT610.com , All Rights Reserved. 京ICP備09083238號
广东25选5开奖结果