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

//自定义了Person类(有Name,Age,Heigth等属性)

List<Person> persons=new List<Person>();
persons.Add(new Person("WuMiao",,));
persons.Add(new Person("YeXinYv",,));
persons.Add(new Person("WuDong",,)); //ListBox控件实现
lb_PersonsList.DataSource=persons; //指定数据源
lb_PersonList.DisplayMember="Name"; //界面显示的是人的名字 //ComboBox控件实现 (与ListBox的实现类似)
cmb_PersonList.DataSource=persons;
cmb_PersonList.DisplayMember="Name";

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

/// <summary>
/// 为ComboBox绑定数据源并提供下拉提示
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="combox">ComboBox</param>
/// <param name="list">数据源</param>
/// <param name="displayMember">显示字段</param>
/// <param name="valueMember">隐式字段</param>
/// <param name="displayText">下拉提示文字</param>
public static void Bind<T>(this ComboBox combox, IList<T> 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<T>(IList<T> list, string displayMember, string displayText)
{
Object _obj = Activator.CreateInstance<T>();
Type _type = _obj.GetType();
if (!string.IsNullOrEmpty(displayMember))
{
PropertyInfo _displayProperty = _type.GetProperty(displayMember);
_displayProperty.SetValue(_obj, displayText, null);
}
list.Insert(, (T)_obj);
}

使用方法

List<CommonEntity> Sources = new List<CommonEntity>();
private void WinComboBoxToolV2Test_Load(object sender, EventArgs e)
{
CreateBindSource();
comboBox1.Bind(Sources, "Name", "Age", "--请选择--");
} private void CreateBindSource(int count)
{
for (int i = ; 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[];
listBox.DisplayMember = "carsnumber";
listBox.ValueMember = "id";

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

for( int i = ; 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. winform中的ListBox和ComboBox绑定数据用法实例

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

3. WinForm中ListBox数据绑定问题

ListBox和ComboBox绑定数据简单例子的更多相关文章

  1. winform中的ListBox和ComboBox绑定数据

    将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //... //自定义了Person类(有Name,Age,Heigth等属性) List<Person> ...

  2. Winfrom 中 ComboBox 绑定数据后设置选定项问题

    在为 ComboBox 当定数据的时候,如果遇到界面显示需要用文本,而获取选定项的值时需要用数字,我们就很习惯使用 DataSource  来进行绑定. 例如以下代码: List<TextVal ...

  3. (摘)C#comboBox绑定数据

    C#中comboBox用代码绑定数据库中在某一列.用处:跟radioButton联系在一起,可以根据radioButton在选择而在comboBox显示出不同的值. private void radi ...

  4. 【WPF】给下拉列表ComboBox绑定数据

    思路:给ComboBox控件设置它的ItemSource绑定到ViewModel中的某个列表上,该列表是某个实体类的集合(如List< Person >),而ComboBox列表要显示的是 ...

  5. winform combobox绑定数据

    mboBox下拉菜单控件,在数据库内的ComboBox应用的表进行修改时,如果是用的普通方法,显示数据一个方法,添加数据一个方法 这样会导致程序后期维护难度增加,在这里使用数据绑定来让ComboBox ...

  6. 学习日记10、easyui编辑器combobox绑定数据的两种方式

    1.数据本地绑定 var card = [{ "value": "正常", "text": "正常" }, { &quo ...

  7. 也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题

    刚才遇到一个怪现象:同一个窗口,同一张表,通过第一个Combobox值的改变,动态绑定第二个Combobox,结果出现一个怪现象,第一个Combobox有的值改变第二个Combobox一切正常,有几个 ...

  8. Spark记录-本地Spark读取Hive数据简单例子

    注意:将mysql的驱动包拷贝到spark/lib下,将hive-site.xml拷贝到项目resources下,远程调试不要使用主机名 import org.apache.spark._ impor ...

  9. 解决WP8应用里ListBox绑定数据变多导致越来越卡

    ListBox控件绑定数据,当滑动到底部的时候加载数据到列表上,这样就会产生一个问题,当ListBox上面绑定的数据有几千条的时候,界面将会卡顿,我们可以通过在ListBox上只绑定指定数量的数据,其 ...

随机推荐

  1. Notes on UE4-Blender workflow

    In UE4: When you import a rigged model (mesh parents armature) to UE4, it will be converted to a Ske ...

  2. 复选框checkbox样式修改

    该方法只兼容IE9及以上 将checkbox和label关联起来, 将checkbox隐藏掉,通过点击label来点击checkbox,label的样式即可自定义. 通过checkbox:checke ...

  3. 每天一个linux命令:【转载】ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  4. Vijos1891 学姐的逛街计划 【费用流】*

    Vijos1891 学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课. 偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, ...

  5. mysql主从简单配置

    第一步.配置主从,来自于博文 https://www.cnblogs.com/gl-developer/p/6170423.html 下面配置的步骤就直接复制了. 一.准备工作: 1.主从数据库版本最 ...

  6. 揭示同步块索引(中):如何获得对象的HashCode

    转自:http://www.cnblogs.com/yuyijq/archive/2009/08/13/1545617.html 题外话:为了尝鲜,也兴冲冲的安装了Win7,不过兴奋之余却郁闷不已,由 ...

  7. bat总结1

    获取当前目录 @echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前盘符和路径的短文件名格式:%~sdp0echo 当前批处理全路径:%~f0echo 当前C ...

  8. distinct和group by的性能比较

    distinct和group by的性能比较 当去重复的字段 的个数比较多的时候,group by 比distinct要快很多 当去重复的字符 的个数比较少的时候,distinct 比group by ...

  9. DZ X3 和 ECshop 通过uc_server实现会员同步整合教程.

    会员数据整合是实现商城和论坛系统共享会员数据.论坛系统注册会员整合后可直接在商城登陆.现以本人社区为例.本人社区采用DZ最新的X3.1 商城采用的ECshop最近的V2.7.3 现在想把两个模板整合在 ...

  10. 笔记:配置 webpack dev server

    笔记:配置 webpack dev server 安装 webpack-dev-server 组件 配置 webpack.config.js 配置 增加 html-webpack-plugin 组件 ...