Visual Studio C#中的数据绑定
五. 复杂型组件的数据绑定:
在上面的介绍中,了解到对复杂型组件的数据绑定是通过设定组件的某些属性来完成数据绑定的。首先来介绍一下ComboBox组件的数据绑定.
(1).ComboBox组件的数据绑定:
在得到数据集后,只有设定好ComboBox组件的的三个属性就可以完成数据绑定了,这三个属性是:、"DisplayMember"、"ValueMember"。其中"DataSource"是要显示的数据集,"DisplayMember"是ComboBox组件显示的字段,"ValueMember"是实际使用值。具体如下:
在上面的介绍中,了解到对复杂型组件的数据绑定是通过设定组件的某些属性来完成数据绑定的。首先来介绍一下ComboBox组件的数据绑定.
(1).ComboBox组件的数据绑定:
在得到数据集后,只有设定好ComboBox组件的的三个属性就可以完成数据绑定了,这三个属性是:、"DisplayMember"、"ValueMember"。其中"DataSource"是要显示的数据集,"DisplayMember"是ComboBox组件显示的字段,"ValueMember"是实际使用值。具体如下:
ComboBox1.DataSource = myDataSet ; ComboBox1.DisplayMember = "" ; ComboBox1.ValueMember = "" ; |
注释:此时绑定是Access 2000数据库中"person"表的"xm"字段。由此可以得到ComboBox组件数据绑定的源程序代码(Combo01.cs),本代码操作数据库是Access 2000:
public class Form1 : Form { private ComboBox ComboBox1 ; private Button button1 ; private System.Data.DataSet myDataSet ; private System.ComponentModel.Container components = null ; public Form1 ( ) { file://打开数据链接,得到数据集 GetConnect ( ) ; InitializeComponent ( ) ; } file://清除程序中使用过的资源 protected override void Dispose ( bool disposing ) { if ( disposing ) { if ( components != null ) { components.Dispose ( ) ; } } base.Dispose ( disposing ) ; } private void GetConnect ( ) { file://创建一个 OleDbConnection string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; string strCom = " SELECT * FROM person " ; file://创建一个 DataSet myDataSet = new DataSet ( ) ; myConn.Open ( ) ; file://用 OleDbDataAdapter 得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; file://把Dataset绑定person数据表 myCommand.Fill ( myDataSet , "person" ) ; file://关闭此OleDbConnection myConn.Close ( ) ; } private void button1_Click ( object sender , System.EventArgs e ) { ComboBox1.DataSource = myDataSet ; ComboBox1.DisplayMember = "" ; ComboBox1.ValueMember = "" ; } static void Main ( ) { Application.Run ( new Form1 ( ) ) ; } } |
图03:对ComboBox组件数据绑定的程序界面 |
得到了ComboBox组件对本地数据库的数据绑定程序,也就十分方便的得到ComboBox组件绑定Sql Server 2000源程序代码(Combox02.cs)具体如下:
public class Form1 : Form { private ComboBox ComboBox1 ; private Button button1 ; private System.Data.DataSet myDataSet ; private System.ComponentModel.Container components = null ; public Form1 ( ) { file://打开数据链接,得到数据集 GetConnect ( ) ; InitializeComponent ( ) ; } file://清除程序中使用过的资源 protected override void Dispose ( bool disposing ) { if ( disposing ) { if ( components != null ) { components.Dispose ( ) ; } } base.Dispose ( disposing ) ; } private void GetConnect ( ) datasource是什么意思{ // 设定数据连接字符串,此字符串的意思是打开Sql server数据库,服务器名称为server1,数据库为data1 string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn.Open ( ) ; string strCom = " SELECT * FROM person " ; file://创建一个 DataSet myDataSet = new DataSet ( ) ; file://用 OleDbDataAdapter 得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; file://把Dataset绑定person数据表 myCommand.Fill ( myDataSet , " person " ) ; file://关闭此OleDbConnection myConn.Close ( ) ; } private void button1_Click ( object sender , System.EventArgs e ) { ComboBox1.DataSource = myDataSet ; ComboBox1.DisplayMember = "" ; ComboBox1.ValueMember = "" ; } static void Main ( ) { Application.Run ( new Form1 ( ) ) ; } } |
C# WinForm 中ComboBox数据绑定的问题
2009-12-29 09:24
怎样让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# ComBox 数据列表绑定方式 this.CmbSex.Items.AddRange(new object[] { "男","女" });//邦定数据 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论