zoukankan      html  css  js  c++  java
  • C# WinForm 中ComboBox数据绑定的问题 (转)

    来自: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("要绑定控件的属性如下拉框的SelectedValueText",   数据源如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";    
       
    注意成员一定是属性名,而不是其它  
       
    同样,数组也是,自己实践就可明白了!

  • 相关阅读:
    BP神经网络基本原理
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    LSH算法原理
    数据库索引的作用和长处缺点
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    Linux makefile 教程 很具体,且易懂
    银行家算法
    HDU 1757 A Simple Math Problem(矩阵高速幂)
    js中substr与substring的差别
    BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
  • 原文地址:https://www.cnblogs.com/gisoracle/p/3591719.html
Copyright © 2011-2022 走看看