来自: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";    
   
注意成员一定是属性名,而不是其它  
   
同样,数组也是,自己实践就可明白了!

C# WinForm 中ComboBox数据绑定的问题 (转)的更多相关文章

  1. [C#]WinForm 中 comboBox控件之数据绑定

    [C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...

  2. winform中ComboBox实现text和value,使显示和值分开,重写text和value属性

    winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...

  3. WinForm 中 comboBox控件之数据绑定

    一.IList 现在我们直接创建一个List集合,然后绑定 1 IList<string> list = new List<string>(); 2 list.Add(&quo ...

  4. WinForm 中 comboBox控件数据绑定

    一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<string>(); list.Add("11 ...

  5. c#(winform)中ComboBox添加Key/Value项、获取选中项、根据Key

    WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应用通常是键/值对的形式去绑定它的. 参考了一些网上的例子,最终写了一个辅助类用于方便对 ...

  6. winform中的数据绑定

    1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[& ...

  7. winform中ComboBox控件的简单使用

    在开发winform中用到了ComboBox,但是发现和asp.net中的DropDownList差别比我想象中的大. 给ComboBox添加数据总结的有两种方法(绑定数据库在这里不说): 第一种方法 ...

  8. winform中comboBox控件加默认选项的问题

    winform程序设计中,label,TextBox,ComboBox等几个控件几乎是用得最多的,在设计中经常会遇到一些小问题,如:comboBox控件绑定了数据源之后,如何设置默认值? combob ...

  9. winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)

    上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...

随机推荐

  1. Hibernate逆向工程

    MySQL Administrator 创建表   MyEclipse Database Explorer视图: 1. New  2 .Driver template: MySQL Connector ...

  2. vs2010 无法连接到asp.net development server

    http://blog.csdn.net/xqf309/article/details/7881257 今天打开之前的程序,按了F5进行调试,等了会弹出窗体来说:无法连接到asp.net develo ...

  3. 为Hadoop配置Win8.1授时服务器

    启动Windows服务,顺序如下: SSTPS(secure socket tunneling protocol service)服务 Telephony服务 Remote Access Connec ...

  4. UVA 315 315 - Network(求割点个数)

     Network  A Telephone Line Company (TLC) is establishing a new telephone cable network. They are con ...

  5. SQL Prompt 5.3.4.1

    Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程   Red Gate系列之三 SQL Se ...

  6. 三、FreeMarker 模版开发指南 第三章 模版

    章节内容如下:   总体结构 指令 表达式 插值 一.总体结构 实际上你用程序语言编写的程序就是模板,模板也被称为FTL(代表FreeMarker模板语言).这是为编写模板设计的非常简单的编程语言. ...

  7. [转载代码]VB.NET 中查询 Linq to SQL 执行时的SQL语句

    在搜索使用LINQ TO SQL 添加数据后获得自增长ID的方法时,发现C#可以使用DebuggerWritter把使用Linq to SQL执行的SQL语句显示到即时窗口,于是在网上搜索到在VB.N ...

  8. arcmap+vs2010

    esri为vs2010提供了addin开发模版,有几个关键的地方注意下 1.C:\Program Files (x86)\MSBuild\Esri\下存在ESRI.ArcGIS.AddIns.Serv ...

  9. JTextField限制 输入数字

    貌似有很多方法,先记了再说... 1.限制输入数字 用法 textfield.setDocument(new IntegerDocument()); class IntegerDocument ext ...

  10. RFID与射频卡电器特性

    电气特性: 容量为8K位EEPrOM: ● 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位: ● 每个扇区有独立的一组密码及访问控制: ● 每张卡有唯一序列号,为32位: ● 具有防冲 ...