2013年11月27日水曜日

【VB.NET】DataView.ToTable 抽出した行から新しいDataTableを作成

DataViewのToTableで抽出した行を基に新しいDataTableを作成します。

  • DataView.ToTable()
    DataViewで抽出した行を基に新しいDataTableを作成します。
  • DataView.ToTable(TableName)
    DataViewで抽出した行を基に新しいテーブル名でDataTableを作成します。
      TableName‥新しいテーブル名
  • DataView.ToTable(Distinct,ColumnName())
    DataViewで抽出した行を基に重複した行を排除し新しいDataTableを作成します。
      DistinctTrue:重複した行を排除する False
    重複した行を排除しない
      ColumnName()‥新しいテーブルに含まれる列名の配列
  • DataView.ToTable(TableName,Distinct,ColumnName())
    DataViewで抽出した行を基に重複した行を排除し新しい名前でDataTableを作成します。
      TableName‥新しいテーブル名
      DistinctTrue:重複した行を排除する False
    重複した行を排除しない
      ColumnName()‥新しいテーブルに含まれる列名の配列
以下使用例です。
フォームにコントロールを配置
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'サンプルデータテーブル
        Dim sampleTable As New DataTable
        sampleTable.TableName = "SampleTable"
        sampleTable.Columns.Add("ItemCD", Type.GetType("System.String"))
        sampleTable.Columns.Add("ItemName", Type.GetType("System.String"))
        sampleTable.Columns.Add("Price", Type.GetType("System.Double"))
        sampleTable.Columns.Add("UnitSales", Type.GetType("System.Double"))
        sampleTable.Columns.Add("SalesAmount", Type.GetType("System.Double"))
 
        sampleTable.Rows.Add("001", "商品001", 100, 8, 100 * 8)
        sampleTable.Rows.Add("003", "商品003", 130, 5, 130 * 5)
        sampleTable.Rows.Add("001", "商品001", 100, 3, 100 * 3)
        sampleTable.Rows.Add("002", "商品002", 120, 6, 120 * 6)
        sampleTable.Rows.Add("002", "商品002", 120, 5, 120 * 5)
        sampleTable.Rows.Add("003", "商品003", 130, 7, 130 * 7)
        sampleTable.Rows.Add("003", "商品003", 130, 1, 130 * 1)
        sampleTable.Rows.Add("002", "商品002", 120, 3, 120 * 3)
        sampleTable.Rows.Add("001", "商品001", 100, 9, 100 * 9)
 
        'SampleTableの表示
        Me.DataGridView1.DataSource = sampleTable
 
        'DataViewを設定
        Dim dv As New DataView(sampleTable)
 
        '行を抽出
        dv.RowFilter = "ItemCD = '001' Or ItemCD = '003'"
 
        'DataViewを表示
        Me.DataGridView1.DataSource = dv
 
        '抽出された行で新しいDataTableを作成
        Dim newTable1 As DataTable = dv.ToTable()
        Me.DataGridView2.DataSource = newTable1
 
        '列を指定し重複した行の排除なしで新しいDataTableを作成
        Dim newTable2 As DataTable = dv.ToTable(False, "ItemCD")
        Me.DataGridView3.DataSource = newTable2
 
        '列を指定し重複した行を排除して新しい名前のDataTableを作成
        Dim newTable3 As DataTable = dv.ToTable("NewTable", True, "ItemCD", "ItemName")
        Me.DataGridView4.DataSource = newTable3
 
    End Sub
End Class
実行結果

2 件のコメント:

  1. C# バージョンも是非掲載お願いします!

    返信削除
    返信
    1. しばらくサボっていて返信できませんでした。申し訳ないです。
      自己解決していれば良いのですが…
      C#につきましては時間えお見て掲載するようにしたいと思います。

      削除