本文详细讲解了DataGridView控件的数据绑定,并通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
目录
一、未绑定模式二。绑定模式示例程序:1。界面设计如下图所示:2。代码实现如下:使用DataGridView控件,可以显示和编辑来自许多不同类型数据源的表数据。
将数据绑定到DataGridView控件非常简单直观。在大多数情况下,您只需要设置DataSource属性。当绑定到包含多个列表或表的数据源时,只需将DataMember属性设置为指定要绑定的列表或表的字符串。
一、非绑定模式
所谓未绑定模式,是指DataGridView控件显示的数据不是来自绑定的数据源,而是可以通过代码手动填充到DataGridView控件中,这给DataGridView控件增加了很大的灵活性。让我们来看看DataGridView控件。列有很多种类型,这些类型都是间接或直接从DataGridViewColumns继承而来的。以下是我们经常使用的一些类型:
解释类DataGridViewTextBoxColumn与基于文本的值一起使用,并在绑定到数值和字符串类型的值时自动生成DataGridViewCheckBoxColumn。它与布尔值和checkState值一起使用。绑定到这些类型的值用于显示图像时自动生成DataGridViewImageColumn,绑定到字节数组、图像对象或图标对象用于显示单元格中的按钮时自动生成DataGridViewButtonColumn,绑定时不会自动生成。通常用作未绑定列,DataGridViewComboBoxColumn用户在单元格中显示下拉列表,这些列表不是在绑定时自动生成的。通常,需要手动进行数据绑定。DataGridViewLinkColumn用于显示单元格中的超链接,这些超链接不是在绑定时自动生成的。通常,需要手动进行数据绑定。
二、绑定模式
是将现有数据绑定到DataGridView控件。将数据绑定到DataGridView控件非常简单直观。在大多数情况下,您只需要设置DataSource属性。当绑定到包含多个列表或表的数据源时,只需将DataMember属性设置为指定要绑定的列表或表的字符串。
DataGridView控件支持标准的Windows窗体数据绑定模型,因此它将绑定到下表中描述的类的实例:
1.任何实现IList接口的类,包括一维数组。2.实现IListSource接口的任何类,如DataTable和DataSet。3.任何实现IBindingList接口的类,比如BindingList(Of T)类。4.任何实现IBindingListView接口的类,如BindingSource类。
通常绑定到BindingSource组件,并将BindingSource组件绑定到其他数据源或用业务对象填充组件。绑定组件是首选数据源,因为它可以绑定到各种数据源,并自动解决许多数据绑定问题。
DataGridView绑定数据源的几种方式:
第一种类型:
数据集ds=新数据集();
this . datagridview 1 . data source=ds。表[0];
第二种类型:
DataTable dt=new DataTable();
this . datagridview 1 . data source=dt;
第三种类型:
数据集ds=新数据集();
this . datagridview 1 . data source=ds . tables[ table name ];
第四种:
数据集ds=新数据集();
this . datagridview 1 . data source=ds;
这个;datagridview1datamember=表名;//必须设置DataMember属性,以指定要绑定到数据集中的哪个表。
第五种类型:
ArrayList al=new ArrayList();
this . datagridview 1 . data source=al;
第六种:
Dictionarystring,string dict=new Dictionarystring,string();
this . datagridview 1 . data source=dict;
第七:可以排序。
DataView dv=new DataView();
this . datagridview 1 . data source=dv;
示例程序:
在下面的程序中,演示上述各种绑定方法。
1、界面设计如下图:2、代码实现如下:使用系统;
使用系统。集合。泛型;
使用系统。组件模型;
使用系统。数据;
使用系统。绘图;
使用系统。Linq
使用系统。文本;
使用系统。线程。任务;
使用系统。Windows . Forms
使用系统。配置;
使用系统数据。SqlClient
命名空间DataGridViewDataBinding
{
公共分部类格式:表单
{
公共弗曼()
{
初始化组件();
}
///摘要
///非绑定模式
////摘要
///param name=sender/param
///param name=e/param
私有void btn_NotBinding_Click(对象发送方,EventArgs e)
{
InitDgvByCustom();
}
///摘要
///通过自定义列的方式初始化数据网格视图
////摘要
私有void InitDgvByCustom()
{
//创建列
InitDgvTextBoxColumn(this。DataGridViewContentAlignment .中间中心,用户ID ,用户编号,20,真,真);
InitDgvTextBoxColumn(this。DataGridViewContentAlignment .“中间地带,”用户名,用户名,20,假,真);
InitDgvCheckBoxColumn(this。DataGridViewContentAlignment .中间地带,性,性别,假,真);
//创建行
datagridview row dr row 1=new datagridview row();
第一行.创建单元格(这个。dgv _ Demo);
//设置单元格的值
第一行.单元格[0]。值=1;
第一行.单元格[1]。值=测试;
第一行.单元格[2]。值=真;
//将新创建的行添加到数据网格视图中
this.dgv_Demo .行。添加(dr第1行);
//设置数据网格视图的属性
this.dgv_Demo .allowusertoadrows=false//不自动产生最后的新行
}
///摘要
///创建数据网格视图的文本框列
////摘要
///param name=dgv 要创建列的DataGridView/参数
///param name=_alignmeng 设置列的对齐方式/param
///param name=_columnName 列名/param
///param name=_headerText 显示的标题名/param
///param name=_maxInputLength 可输入的最大长度/param
///param name=_readOnly 设置列是否只读真实的只读错误的读写/param
///param name=_visible 设置列是否可见真实的可见错误的不可见/param
private void InitDgvTextBoxColumn(DataGridView dgv,DataGridViewContentAlignment _ alignmeng,
string _columnName,string _headerText,int _maxInputLength,bool _readOnly,bool _visible)
{
//实例化一个DataGridViewTextBoxColumn列
DataGridViewTextBoxColumn TBC=new DataGridViewTextBoxColumn();
//设置对齐方式
待定标题单元格。风格。alignment=_ alignment
//设置列名
待定. Name=_ columnName
//设置标题
待定HeaderText=_ headerText。
//设置最大输入长度
待定MaxInputLength=_ MaxInputLength;
//设置是否只读
待定ReadOnly=_ readOnly
//设置是否可见
待定。可见光=_可见
//将创建的列添加到数据网格视图中
dgv .列。添加(待定);
}
///摘要
///创建数据网格视图的检验盒列
////摘要
///param name=dgv 要创建列的DataGridView/参数
///param name=_alignmeng 设置列的对齐方式/param
///param name=_columnName 列名/param
///param name=_headerText 显示的标题名/param
///param name=_readOnly 设置列是否只读真实的只读错误的读写/param
///param name=_visible 设置列是否可见真实的可见错误的不可见/param
private void InitDgvCheckBoxColumn(DataGridView dgv,DataGridViewContentAlignment _ alignmeng,
string _columnName,string _headerText,bool _readOnly,bool _visible)
{
//实例化一个DataGridViewTextBoxColumn列
DataGridViewCheckBoxColumn CBC=new DataGridViewCheckBoxColumn();
//设置对齐方式
全血细胞计数标题单元格。风格。alignment=_ alignment
//设置列名
全血细胞计数. Name=_ columnName
//设置标题
全血细胞计数HeaderText=_ headerText。
//设置是否默认选中
//cbc .选定的=_选定的。等于(男) ?真:假;
//设置是否只读
全血细胞计数ReadOnly=_ readOnly
//设置是否可见
全血细胞计数。可见光=_可见
//将创建的列添加到数据网格视图中
dgv .列。添加(CBC);
}
///摘要
///绑定模式
////摘要
///param name=sender/param
///param name=e/param
私有void btn_Binding_Click(对象发送方,EventArgs e)
{
InitDgvByBinding();
}
///摘要
///通过数据绑定的方式初始化数据网格视图
////摘要
私有void InitDgvByBinding()
{
#地区绑定单一数据源
string strSQL= select * from users ;
//设置数据源
DataTable dt source=get DataTable(strSQL);
//直接绑定到表
//this.dgv_Demo .数据源=数据源
//绑定到数据视图
DataView dv=dtSource .默认视图
//按照密码字段降序排序
dv .排序=密码desc ;
this.dgv_Demo .数据源=dv
#结束区域
////不自动产生最后的新行
this.dgv_Demo .AllowUserToAddRows=false
}
///摘要
///都市数据库数据
////摘要
///param name=strSQL/param
///返回/返回
私有数据表GetDataTable(字符串strSQL)
{
DataTable dt dgv=new DataTable();
//dtDgv .TableName=
string strConn=配置管理器.ConnectionStrings[DbConn].连接字符串
SqlConnection conn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand(strSQL,conn);
sqldata适配器adapter=新的sqldata适配器(cmd);
尝试
{
conn . Open();
适配器. fill(dtd gv);
}
接住(例外ex)
{ }
最后
{
conn . Close();
}
返回dtDgv
}
私有数据集GetDataSet()
{
DataSet ds dgv=new DataSet();
//第一张表
string strFirstSQL= select * from users ;
DataTable dt first=get DataTable(strFirstSQL);
//设置表名
dtFirst .TableName= UsersTable
//将表添加到资料组中
dsDgv .桌子。Add(dt优先);
//第二张表
string strSecondSQL= select * from grade ;
DataTable dt second=get DataTable(strSecondSQL);
//设置表名
dt秒.TableName= GradeTable
//将表添加到资料组中
dsDgv .桌子。Add(dt秒);
返回dsDgv
}
///摘要
///绑定到第一张表
////摘要
///param name=sender/param
///param name=e/param
私有void btn_BindingFirst_Click(对象发送方,EventArgs e)
{
//清空数据网格视图
this.dgv_Demo .数据源=空
//获取数据集
DataSet ds数据源=get DataSet();
#地区方式一
this.dgv_Demo .DataSource=dsDataSource
//必须设置数据成员属性,指定绑定到资料组的哪张表
this.dgv_Demo .数据成员=用户表
#结束区域
#地区方式二
//this.dgv_Demo .数据源=dsDataSource .表[0];
#结束区域
#地区方式三
//this.dgv_Demo .数据源=dsDataSource .表[ user stable ];
#结束区域
}
///摘要
///绑定到第二张表
////摘要
///param name=sender/param
///param name=e/param
私有void BTN _绑定秒_点击(对象发送方,EventArgs e)
{
//清空数据网格视图
this.dgv_Demo .数据源=空
//获取数据集
DataSet ds数据源=get DataSet();
#地区方式一
this.dgv_Demo .DataSource=dsDataSource
//必须设置数据成员属性,指定绑定到资料组的哪张表
this.dgv_Demo .DataMember= GradeTable
#结束区域
#地区方式二
//this.dgv_Demo .数据源=dsDataSource .表[0];
#结束区域
#地区方式三
//this.dgv_Demo .数据源=dsDataSource .表格[等级表];
#结束区域
}
///摘要
///绑定到字典
////摘要
///param name=sender/param
///param name=e/param
私有void BTN _绑定字典_点击(对象发送方,EventArgs e)
{
Dictionaryint,string dict数据源=新字典int,string();
字典数据源。添加(1,"计算机系);
字典数据源。添加(2,"外语系);
字典数据源。添加(3,"数学系);
字典数据源。添加(4,"中文系);
DataGridViewTextBoxColumn TBC key=new DataGridViewTextBoxColumn();
tbcKey .HeaderText=健;
//设置要绑定到的字段
tbcKey .DataPropertyName= Key
this.dgv_Demo .列。add(tbcKey);
DataGridViewTextBoxColumn TBC value=new DataGridViewTextBoxColumn();
波音公司值. HeaderText=值;
//设置要绑定到的字段
波音公司值DataPropertyName= Value
this.dgv_Demo .列。添加(待定值);
//设置数据源方式一:字典转换成数组
//this.dgv_Demo .数据源=dictDataSource .to array();
//设置数据源方式二:字典转换成集合
//this.dgv_Demo .数据源=dictDataSource .to list();
//设置数据源方式三
//this.dgv_Demo .数据源=(来自字典数据源中的p
//选择新的
//{
//Key=p.Key,
//值=p。值
//}).to list();
//设置数据源方式四
this.dgv_Demo .数据源=(来自字典数据源中的p
选择新建
{
Key=p.Key,
价值=p。价值
}).to array();
}
}
}
到此这篇关于数据网格视图控件数据绑定的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。