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

开始以前,先认识一下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 属性设置为一个列表单个对象类型。(这三者并不一定要实现IListIListSource

这两种机制都创建一个强类型列表。 BindingSource 支持由其 DataSource DataMember 属性指示的简单数据绑定和复杂数据绑定。
WinForm中,控件绑定数据源是一种常见的操作,可以将数据源中的数据直接显示在对应的控件上,实现数据与界面的交互。 首先,我们需要创建一个数据源,可以是一个集合或是一个数据库查询结果,即我们需要显示的数据。接下来,在设计界面时,选择需要绑定数据源控件,例如DataGridView、ListBox等。 然后,我们可以通过设计视图或代码来绑定数据源。在设计视图中,选择需要绑定数据源控件,在属性窗口中找到DataBindings选项。点击DataBindings选项后,可以为该控件的不同属性绑定数据源,例如DataGridViewDataSource属性或ListBox的Items属性。 如果选择使用代码绑定数据源,则可以通过以下方式实现: 1. 首先,需要在代码中实例化控件对象,可以使用Visual Studio自动生成的代码或手动创建控件对象。 2. 接着,我们需要将数据源赋值控件的相应属性。例如,若要将一个List<T>类型的集合绑定DataGridView控件,我们可以使用DataGridView控件DataSource属性,将集合赋值给该属性。 3. 最后,我们需要调用控件的更新方法,以确保数据源的内容更新到控件上。对于DataGridView控件,可以使用Refresh()方法刷新显示内容。 需要注意的是,控件绑定数据源后,当数据源发生改变时,控件会自动更新显示内容。如果想获取用户对控件的操作,可以使用相应的事件来捕捉用户的操作,并对数据源进行相应的修改处理。 综上所述,WinForm控件绑定数据源是一种方便快捷的方式,能够实现数据与界面的交互,提升用户体验。无论是通过设计视图还是通过代码实现,我们都可以根据实际需求选择最适合的方式进行控件数据绑定
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值