ADO.NET 2.0 - 如何将 DataView 转换成一个 DataTable

一般来说,在我们从 SQL Server 等后端数据来源提取出所需的数据记录之后,会将这些数据储存于前端数据集当中的 DataTable 对象中,亦或是储存于不隶属于任何数据集之个别独立存在的 DataTable 对象中。  
 
正如先前的文章所言,借助于 DataView ,我们便能够替储存于 DataTable 中的数据建立不同的检视。比方说,通过 DataView ,您可以使用不同的排序顺序来检视 DataTable 中的数据,亦或是根据数据列状态或筛选表达式来筛选 DataTable 中的资料。 DataView 提供的是一种动态的数据检视,也就是说,其内容、排序顺序、与成员会反应出来源 DataTable 中的任何变更。  
 
显然在一般的正常处理流程中,是有了 DataTable 之后,才会有 DataView ,问题是,我们能否将一个 DataView 转换成另外一个 DataTable 呢?答案当然是肯定的。 ADO.NET 2.0 DataView 提供了一个全新的 ToTable 方法,使您能轻易根据 DataView 建立出一个 DataTable 对象。  
 
ToTable 方法所建立出的 DataTable 可以内含 DataView 所有的字段或部分的字段,至于数据记录方面可以内含所有的数据记录或是非重复的数据记录,而这些作业都必须借助于不同多载版本的 ToTable 方法来完成。  
 
以下的程序代码示范如何使用 DataView ToTable 方法来建立一个 DataTable 对象,程序代码已加上完整的批注,于此不再解说,执行结果如图表 1 所示:  
 
Option Strict On
Imports System.Data.SqlClient
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   Handles MyBase.Load
        '
利用 SqlConnectionStringBuilder 对象来构建连接字符串。
        Dim connectStringBuilder As New SqlConnectionStringBuilder()
        connectStringBuilder.DataSource = "(local)SQLEXPRESS"
        connectStringBuilder.InitialCatalog = "
北风贸易 "
        connectStringBuilder.IntegratedSecurity = True

        Dim myTable As New DataTable
        Using cn As New SqlConnection(connectStringBuilder.ConnectionString)
            Dim cmdLimingStudio As New SqlCommand( _
   "SELECT
部门 , 员工编号 , 姓名 , 地址 , 出生日期 , 起薪 , 目前薪资 , 玉照 FROM dbo. 章立民研究室 ", cn)
            cn.Open()

            Using dr As SqlDataReader = cmdLimingStudio.ExecuteReader

                '
将从「北风贸易」数据库之「章立民研究室」数据表提取所得的数据记录
                '
加载至个别独立存在的 MyTable 此一 DataTable 对象中。
                myTable.Load(dr, LoadOption.OverwriteChanges)
            End Using
        End Using

        '
myTable 的数据内容显示在第一个 DataGridView 控件中。
        Me.DataGridView1.DataSource = myTable
        '
根据 myTable 此一 DataTable 对象建立一个 DataView ,并且排序与筛选数据。
        Dim myDataView As DataView = myTable.DefaultView
        myDataView.Sort = "
部门 , 姓名 "
        myDataView.RowFilter = "
目前薪资 > 40000 AND 地址 LIKE '% 台北市 %'"

        '
myDataView 的数据内容显示在第二个 DataGridView 控件中。
        Me.DataGridView2.DataSource = myDataView

        '
根据 myDataView 建立出一个全新的 DataTable 对象,
        '
并且要求 DataTable 对象只内含 DataView 中的「姓名」、
        '
「目前薪资」、「地址」与「玉照」等四个字段。此外,
        '
重复的数据记录将不会内含于 DataTable 对象中。
        Dim myNewTable As DataTable = myDataView.ToTable("
章立民研究室子集 ", _
   True, New String() {"
姓名 ", " 目前薪资 ", " 地址 ", " 玉照 "})

        '
myNewData 的数据内容显示在第三个 DataGridView 控件中。
        Me.DataGridView3.DataSource = myNewTable
    End Sub
End Class
                                          图表 1

本文出自 “章立民” 博客,转载请与作者联系!

你可能感兴趣的:(职场,Datatable,休闲,ADO.NET,DATAVIEW)