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("要绑定控件的属性如下拉框的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数据绑定的问题 (转)的更多相关文章
- [C#]WinForm 中 comboBox控件之数据绑定
[C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...
- winform中ComboBox实现text和value,使显示和值分开,重写text和value属性
winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...
- WinForm 中 comboBox控件之数据绑定
一.IList 现在我们直接创建一个List集合,然后绑定 1 IList<string> list = new List<string>(); 2 list.Add(&quo ...
- WinForm 中 comboBox控件数据绑定
一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<string>(); list.Add("11 ...
- c#(winform)中ComboBox添加Key/Value项、获取选中项、根据Key
WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应用通常是键/值对的形式去绑定它的. 参考了一些网上的例子,最终写了一个辅助类用于方便对 ...
- winform中的数据绑定
1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[& ...
- winform中ComboBox控件的简单使用
在开发winform中用到了ComboBox,但是发现和asp.net中的DropDownList差别比我想象中的大. 给ComboBox添加数据总结的有两种方法(绑定数据库在这里不说): 第一种方法 ...
- winform中comboBox控件加默认选项的问题
winform程序设计中,label,TextBox,ComboBox等几个控件几乎是用得最多的,在设计中经常会遇到一些小问题,如:comboBox控件绑定了数据源之后,如何设置默认值? combob ...
- winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)
上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...
随机推荐
- NodeJS:树的序列化
本文也在我的博客edwardesire.com上,欢迎品尝. 接着上周的工作,我们把上周反序列得到的dtree对象输出到JSON,再将其序列化后存入MongoDB. 存入文档 先将上次得到的决策树对象 ...
- Linux命令(1)-scp
Linux scp命令用于Linux之间复制文件和目录,包括从本地复制到远程.从远程复制到本地是两种使用方式. 命令基本格式 scp [可选参数] file_source file_target 从本 ...
- memcached全面剖析–4. memcached的分布式算法
memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能. 服务器端仅包括 第2次. 第3次 前坂介绍的内存存储功能,其实现 ...
- Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)
题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...
- Linux设置禁止用户登陆
Linux设置禁止用户登陆 vim /etc/shadow 第二栏(密码栏)设为*,会丢失密码 usermod -L username # -L Lock; -U Unlock chsh userna ...
- linux使用getopt解析参数
getopt是linux下解析命令行参数的api.以linux内核代码的一个例子来说明: static void cmdline(int argc, char *argv[]){ int o ...
- MFC实现数独(1)
雨天纷纷扰扰,数月里每日有雨,这个夏天不热,写这个数独的动机很简单:实践是最好的成长方式,想要获得自信,必有这么一遭,我躲不过.至于决定记录成博客,则是因为很久没有写文章,经常感觉脑海里很空白,屡次开 ...
- 使用SVG Path绘图
最近一个项目,需要做个Web版本的设计器,用来进行工厂流水线布局的设计. 项目中采用了SVG.JS来做,但是以前流水线是采用单纯的画线的方式实现.客户提出希望用不同的底纹表示不同的流水线,经过一番调查 ...
- PostgreSQL的 initdb 源代码分析之二十四
继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...
- 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等
今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...