使用数据视图

前面的示例显示了如何使用Select方法动态筛选和排序数据表所包含的数据。ADO.NET有另一种方法可以完成相同的操作,即数据视图。数据视图是System.Data.DataView类的实例,可以创建存储在底层数据表中的数据的动态视图,以反映对其内容和排序所做的所有变化。它不同于Select方法,Select返回数据视图的数组,其内容只反映数据值所做的变化,不涉及其排序。

注意:数据视图是数据表内容的动态表示。与SQL视图一样,它不保存数据。

实例:使用DataView对象细化数据

View Code
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对象可以提供一种强大而灵活的方法来动态更改视图的内容。

 

posted on 2012-07-20 15:10  流星落  阅读(252)  评论(0编辑  收藏  举报

导航