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

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

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.

 

转载地址:http://pjlxo.baihongyu.com/

你可能感兴趣的文章
前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性
查看>>
C 语言结构体内存布局问题
查看>>
js 数组排序
查看>>
iOS VIPER架构实践(一):从MVC到MVVM到VIPER
查看>>
Android鬼点子-近期项目总结(2)-日历
查看>>
是时候学习真正的 spark 技术了
查看>>
android开发怎么少的了后端(上)
查看>>
android应用检测更新
查看>>
从硅谷到杭州:一个海归的阿里故事
查看>>
Objective-C 之Block(1)
查看>>
Android MP3录制,波形显示,音频权限兼容与播放
查看>>
那些年我造的轮子之RPC
查看>>
构建Spring Cloud微服务分布式云架构详细步骤
查看>>
三次握手与四次挥手
查看>>
Spring Task定时任务的配置和使用
查看>>
逆向中使用weak
查看>>
CoordinatorLayout、AppBarLayout实现上滑隐藏图片,下滑显示图片
查看>>
React-Router底层原理分析与实现
查看>>
十五、Android性能优化之提升应用的启动速度和Splash页面的设计
查看>>
09-封装
查看>>