博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListBox和ComboBox绑定数据简单例子
阅读量:4695 次
发布时间:2019-06-09

本文共 3031 字,大约阅读时间需要 10 分钟。

1. 将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容

//自定义了Person类(有Name,Age,Heigth等属性)List
persons=new List
();persons.Add(new Person("WuMiao",18,175));persons.Add(new Person("YeXinYv",20,170));persons.Add(new Person("WuDong",18,175));//ListBox控件实现lb_PersonsList.DataSource=persons; //指定数据源lb_PersonList.DisplayMember="Name"; //界面显示的是人的名字//ComboBox控件实现 (与ListBox的实现类似)cmb_PersonList.DataSource=persons;cmb_PersonList.DisplayMember="Name";

 

2. ComboBox绑定数据源并提供下拉提示功能

/// /// 为ComboBox绑定数据源并提供下拉提示/// /// 
泛型
/// ComboBox/// 数据源/// 显示字段/// 隐式字段/// 下拉提示文字public static void Bind
(this ComboBox combox, IList
list, string displayMember, string valueMember, string displayText){ AddItem(list, displayMember, displayText); combox.DataSource = list; combox.DisplayMember = displayMember; if (!string.IsNullOrEmpty(valueMember)) combox.ValueMember = valueMember;}private static void AddItem
(IList
list, string displayMember, string displayText){ Object _obj = Activator.CreateInstance
(); Type _type = _obj.GetType(); if (!string.IsNullOrEmpty(displayMember)) { PropertyInfo _displayProperty = _type.GetProperty(displayMember); _displayProperty.SetValue(_obj, displayText, null); } list.Insert(0, (T)_obj);}

使用方法

List
Sources = new List
();private void WinComboBoxToolV2Test_Load(object sender, EventArgs e){ CreateBindSource(5); comboBox1.Bind(Sources, "Name", "Age", "--请选择--");} private void CreateBindSource(int count){ for (int i = 0; i < count; i++) { CommonEntity _entity = new CommonEntity(); _entity.Age = i; _entity.Name = string.Format("Yan{0}", i); Sources.Add(_entity); }}
具体的使用操作代码

 

3. 双向绑定

  ListBox控件的datasourse属性能绑定多种数据格式,如List表,Table表。如果绑定List表当数据源发生改变时,ListBox控件显示并不会跟着改变。

  使用BindingList<T>类能实现数据源改变后ListBox的实时更新。只需要把数据源添加到BindingList对象中,并将ListBox的datasource绑定为BindingList 对象。当对BindingList的数据进行发生增、删、或者指向新对象时ListBox界面将跟着变动。需要注意的是对数据源属性的修改并不会引起界面的更新。

  DataTable也能实现该功能。实现这一功能的原理是一个叫做双向绑定的功能。

 

4. ListBox数据绑定并显示的问题

以前以为可以根ASP.NET中的用法差不多,即

ListBox listBox;listBox.DataSource = ds;listBox.DataTextField = "要显示的字段名";listBox.DataValueField = "id";listBox.DataBind();

然后利用listBox.SelectedItem即可访问被选中的项的值,当然在WinForm中除了DataSource的属性还有,其他都没有了,WinForm就换成如下方式:

listBox.DataSource = ds.Tables[0];listBox.DisplayMember = "carsnumber";listBox.ValueMember = "id";

这 样便可在ListBox正确显示出来,并且利用listBox.SelectedValue可以得到选定项的对应的id, 但是当我用listBox.SelectedItem打算得到相应的carsnumber值时,确显示System.Data.DataRowView, 利用listBox.Item[]访问得到的结果是一样的。最后在网上搜搜看能不能找到答案,又在CSDN上搜了一下以前的帖子,最后找到了答案,如果要 循环访问绑定了的Text值和Value 值,可用如下方式:

for( int i = 0; i < listBox.Items.Count; i++ ){DataRowView drv = listBox.Items[i] as DataRowView;if( drv != null ){MessageBox.Show( "Text:" + drv[listBox.DisplayMember].ToString() );MessageBox.Show( "Value:" + drv[listBox.ValueMember].ToString() );}}

 

参考文章

1.

2.

3.

 

转载于:https://www.cnblogs.com/arxive/p/5705437.html

你可能感兴趣的文章
重新开始
查看>>
eclipse 灵活使用makefile来编译C/C++
查看>>
最短寻道优先算法----SSTF算法
查看>>
.net core实践系列之短信服务-Sikiro.SMS.Bus服务的实现
查看>>
正经学C#_判断[switch语句]:[c#入门经典]
查看>>
JavaScript高级程序设计学习笔记--事件
查看>>
python_基础类型
查看>>
AOP面向切面编程
查看>>
Error opening zip file or JAR manifest missing : D:\play-1.2.5/framework/play-1.2.5.jar
查看>>
TCP/IP具体解释--nagle算法和TCP_NODELAY
查看>>
android 如何加入第一3正方形lib图书馆kernel于
查看>>
取消改变基本数据——应用备忘录模式
查看>>
小米成为
查看>>
多线程之线程池Executor应用
查看>>
未将对象引用设置到对象的实例--可能出现的问题总结
查看>>
环信即时通讯
查看>>
基础数据类型的补充,转换分来以及编码的进阶
查看>>
jsonp
查看>>
jQuery 选择器 (基础恶补之三)+Ajax
查看>>
js或jquery实现点击某个按钮或元素显示div,点击页面其他任何地方隐藏div
查看>>