使用数据视图
前面的示例显示了如何使用Select方法动态筛选和排序数据表所包含的数据。ADO.NET有另一种方法可以完成相同的操作,即数据视图。数据视图是System.Data.DataView类的实例,可以创建存储在底层数据表中的数据的动态视图,以反映对其内容和排序所做的所有变化。它不同于Select方法,Select返回数据视图的数组,其内容只反映数据值所做的变化,不涉及其排序。
注意:数据视图是数据表内容的动态表示。与SQL视图一样,它不保存数据。
实例:使用DataView对象细化数据
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace DataViews { class Program { static void Main(string[] args) { string connString = @" server = .; integrated security =true; database =northwind"; string sql = @"select contactname,country from customers"; SqlConnection conn = new SqlConnection(connString); try { conn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = new SqlCommand(sql, conn); DataSet ds = new DataSet(); da.Fill(ds, "customers"); DataTable dt = ds.Tables["customers"]; DataView dv = new DataView(dt, "country ='Germany'", "country", DataViewRowState.CurrentRows); foreach (DataRowView drv in dv) { for (int i = 0; i < dv.Table.Columns.Count; i++) Console.Write(drv[i] + "\t"); Console.WriteLine(); } } catch (SqlException e) { Console.WriteLine("Error: {0}", e.ToString()); } finally { conn.Close(); } Console.ReadKey(); } } }
示例说明
创建一个新的DataView对象,给其构造函数传递4个参数,对其进行初始化:
DataTable dt = ds.Tables["customers"];
DataView dv = new DataView(dt, "country ='Germany'", "country", DataViewRowState.CurrentRows);
第一个参数是DataTable,第二个是对数据表内容进行筛选和筛选器,第三个是排序列,最后一个参数指定要在数据视图中包含的行的类型。
System.Data.DataViewRowState对象是一个枚举,代表行在数据视图的底层数据表中可以拥有的不同状态。
视图实质就是获得Table以后,对其进行处理格式,用视图显示。
接下来,遍历数据视图中的行:
foreach (DataRowView drv in dv)
{
for (int i = 0; i < dv.Table.Columns.Count; i++)
Console.Write(drv[i] + "\t");
Console.WriteLine();
}
DataRowView代表数据视图中的单个行。
DataView对象可以提供一种强大而灵活的方法来动态更改视图的内容。