一、定义区别
-
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多一个参数,可以定义返回表的名称。