开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定。

1) 简单数据绑定

简单的数据绑定是将用户控件的某一个属性绑定至某一个类型实例上的某一属性。采用如下形式进行绑定:引用控件.DataBindings.Add("控件属性", 实例对象, "属性名", true);

2) 复杂数据绑定

复杂的数据绑定是将一个以列表为基础的用户控件(例如:ComboBox、ListBox、ErrorProvider、DataGridView等控件)绑定至一个数据对象的列表

基本上,Windows Forms的复杂数据绑定允许绑定至支持IList接口的数据列表。此外,如果想通过一个BindingSource组件进行绑定,还可以绑定至一个支持IEnumerable接口的数据列表。

对于复杂数据绑定,常用的数据源类型有(代码以Combobox作为示例控件):

1)IList接口(包括一维数组,ArrayList等)

示例:

private void InitialComboboxByList()

{

ArrayList list = new ArrayList();

for (int i = 0; i < 10;i++ )

{

list.Add(new DictionaryEntry(i.ToString(), i.ToString() + "_value"));

}

this.comboBox1.DisplayMember = "Key";

this.comboBox1.ValueMember = "Value";

this.comboBox1.DataSource = list;

}

2IListSource接口(DataTableDataSet等)

private void InitialComboboxByDataTable()

{

DataTable dt=new DataTable();

DataColumn dc1 = new DataColumn("Name");

DataColumn dc2 = new DataColumn("Value");

dt.Columns.Add(dc1);

dt.Columns.Add(dc2);

for (int i = 1; i <=10;i++ )

{

DataRow dr = dt.NewRow();

dr[0] = i;

dr[1] = i + "--" + "hello";

dt.Rows.Add(dr);

}

this.comboBox1.DisplayMember = "Name";

this.comboBox1.ValueMember = "Value";

this.comboBox1.DataSource = dt;

}

3) IBindingList接口(如BindingList类)

4) IBindingListView接口(如BindingSource类)

示例:

private void InitialComboboxByBindingSource ()

{

Dictionary<string, string> dic = new BindingSource <string, string>();

for (int i = 0; i < 10;i++ )

{

dic.Add(i.ToString(),i.ToString()+"_hello");

this.comboBox1.DisplayMember = "Key";

this.comboBox1.ValueMember = "Value";

this.comboBox1.DataSource = new BindingSource(dic, null);

}

}

注意一下上面的程序,BindingSource的DataSource属性值为一个Dictionary类型的实例,如果用dic直接给Combobox赋值的话,程序会报错,因为Dictionary<>并没有实现IList或IListSource接口,但是将Dictionary<>放到BindingSource中便可以实现间接绑定。关于BindingSource更详细的信息请在该网址查看:

http://msdn.microsoft.com/zh-cn/library/system.windows.forms.bindingsource(VS.80).aspx

再看下面一个BindingSource的示例:

private void InitialComboboxByObject()

{

this.comboBox1.DisplayMember = "Name";

this.comboBox1.ValueMember = "Value";

this.comboBox1.DataSource = new BindingSource(new DictionaryEntry("Test","Test_Value"), null);

}

上面代码中BindingSource的Datasource是一个结构类型DictionaryEntry,同样的DictionaryEntry并不能直接赋值给Combobox的DataSource,但通过BindingSource仍然可以间接实现。

这是因为:

BindingSource可以作为一个强类型的数据源。其数据源的类型通过以下机制之一固定:

·             使用 Add 方法可将某项添加到 BindingSource 组件中。

·             将 DataSource 属性设置为一个列表单个对象类型。(这三者并不一定要实现IList或IListSource)

这两种机制都创建一个强类型列表。BindingSource 支持由其 DataSource 和 DataMember 属性指示的简单数据绑定和复杂数据绑定。

转自:http://minmin86121.blog.163.com/blog/static/49681157201101904297/

WinForm控件复杂数据绑定常用数据源(对Combobox,DataGridView等控件DataSource赋值的多种方法)的更多相关文章

  1. Android学习之基础知识五—ListView控件(最常用和最难用的控件)

    ListView控件允许用户通过上下滑动来将屏幕外的数据拉到屏幕内,把屏幕内的数据拉到屏幕外. 一.ListView的简单用法第一步:先创建一个ListViewTest项目,在activity_mia ...

  2. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

  3. [C#]WinForm 中 comboBox控件之数据绑定

    [C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...

  4. asp.net学习之 数据绑定控件--List数据绑定控件

    原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...

  5. WP8.1学习系列(第二十三章)——到控件的数据绑定

    在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...

  6. Windows App开发之集合控件与数据绑定

    为ListView和GridView加入数据 ListView採用垂直堆叠得方式显示数据.而GridView则採用水平堆叠得方式. 长相的话嘛,它们都几乎相同. <Grid Name=" ...

  7. 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用

    整理部分JS 控件  WEB前端常用的做成Jsp项目,方便今后直接用 最近又没时间了,等用时间了,再加入更多的, 源码下载: http://download.csdn.net/detail/liang ...

  8. Winform系列——好用的DataGridview过滤控件(表格的高级搜索功能)

    上一篇 Winform系列——好看的DataGridView折叠控件 中主要介绍了DataGridview的表格多级折叠功能.这章主要介绍下最近封装的另一个DataGridview表格高级过滤的功能. ...

  9. WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果

    原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使 ...

随机推荐

  1. UILable自适应frame

    UILabel *textlab = [[UILabel alloc]initWithFrame:CGRectMake(20, 10,ScrollView.frame.size.width - 40, ...

  2. struts1与strut2的区别

    struts1和struts2是两个完全不同的框架 struts1工作流程:发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.在接到 ...

  3. JAVA网络编程基础知识

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...

  4. 如何实例化i2c_client(四法)

    一.在板文件进行client的实例化 在内核的初始化中(例如在板文件中)定义设备的信息.这种操作的前提是内核编译的时候已经确定有哪些i2c设备和它们的地址,还要知道连接的总线的编号. 比如在板文件/a ...

  5. 3 weekend110的job提交的逻辑及YARN框架的技术机制 + MR程序的几种提交运行模式

    途径1: 途径2: 途径3: 成功! 由此,可以好好比较下,途径1和途径2 和途径3 的区别. 现在,来玩玩weekend110的joba提交的逻辑之源码跟踪 原来如此,weekend110的job提 ...

  6. Linux Foundation Secure Boot System Released

    As promised, here is the Linux Foundation UEFI secure boot system.  This was actually released to us ...

  7. Redis Desktop Manager桌面管理工具

    Redis Desktop Manager桌面管理工具,方便管理我们放在redis中的各个缓存 及16个数据库 http://redisdesktop.com/download

  8. Java调用MySQL存储过程

    Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse 首先查看MySQL中的数据库的存储过程,接着编写代码调用 mysql> show procedure status; + ...

  9. XML结构文件的读写

    附件:http://files.cnblogs.com/xe2011/XML_Writer_And_Read.rar 下面这段代码实现了以下功能 数据保存 textBox1的文本,textBox2的文 ...

  10. Operfire/XMPP

    Operfire/XMPP 关于Openfire.XMPP协议.IM相关知识 基于开源 Openfire 聊天服务器 - 开发聊天记录插件 posted @ 2013-03-29 11:03 hooj ...