一、定义区别
-
DataTable:表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。
建立方式
①通过连接数据库后从中读取出来跟数据源断开、独立存在的一个表;
②完全由程序通过代码来建立的一个表。 -
DataView:表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。
-
DataRowView:表示
通过DataRowView.Row 属性得到此DataRowView对应的DataRow
可以将DataView同数据库的视图类比,不过二者存在以下区别。
| DataView | 视图 |
|---|---|
| 只能对某一个DataTable建立视图 | 可以跨表建立视图 |
| 通过DataTable.DefaultView属性来建立,通过DataTable.DefaultView的RowFilter 属性和RowStateFilter 属性筛选这个DataTable的一个行子集。 |
二、相互联系
| DataView | DataTable |
|---|---|
| 建立在DataTable基础上 | |
| DataView.Table 属性可以得到此DataView对应的DataTable | |
| DataView dv = dt.DefaultView; | DataTable dt = dv.ToTable(); |
DataView的toTable和Table
| toTable | Table |
|---|---|
| 方法 | 属性 |
| 通过RowFilter等过滤后的数据创建新实例 | 返回原始数据 |
| 会对DataView本身的数据产生影响 | 不会对DataView本身的数据产生影响 |
三、相互转化
1.dataTable转成dataview
方法一:
if ((dt == null) || ((dt.Rows).Count < 1)) return;
IEnumerable dv = (IEnumerable)((IListSource)dt).GetList();//将datatable转成dataview
foreach (Object o in dv)
{
PropertyDescriptorCollection propDesColl = TypeDescriptor.GetProperties(o);
foreach (PropertyDescriptor pd in propDesColl)
{
Type type = pd.PropertyType;
}
}
方法二:
IEnumerable dv = (IEnumerable)((IListSource)dt).GetList();
2.将DataView转换为DataTable
(1).DataView.ToTable()
根据现有DataView中的行,创建并返回一个新的DataTable。
(2).DataView.ToTable(String)
参数String为返回的DataTable的名称。
注意:输出的表与输入表的列相同,不可自定义。
(3).DataView.ToTable(Boolean,String[]) || DataView.ToTable(Boolean,String[],String[],…)
参数Boolean为true,去重;为false,不去重。
数组String[]为显示返回列值的集合。去重是针对String去重的。
注意:参数Boolean且默认为false;可自定义返回的列。
DataView dv = new DataView(table);//table是DataTable类型的对象
table = dv.ToTable(true,"ID");//去重,且只返回ID列
(4).DataView.ToTable(String,Boolean,String[])
根据现有DataView中的行,创建并返回一个新的DataTable。比3多一个参数,可以定义返回表的名称。
本文详细解析了DataTable和DataView在.NET框架中的角色,包括它们的定义、建立方式及相互之间的联系与转化方法。阐述了DataTable作为内存中独立数据表的特性,以及DataView如何作为其可定制视图进行数据操作。
183

被折叠的 条评论
为什么被折叠?



