DataRelationとDataColumn.Expressionプロパティを利用したグループ化処理のサンプル

DBからすでにデータを持ってきた子テーブルという名前のDataTableがある前提(サンプルではねつ造している。)

番号でグルーピングして、数量計を取りたい。

001 Dim 子テーブル As New DataTable
002         子テーブル.Columns.Add(New DataColumn("番号"))
003         子テーブル.Columns.Add(New DataColumn("枝番"))
004         子テーブル.Columns.Add(New DataColumn("数量", GetType(Decimal)))
005 
006         For 番号 As Integer = 1 To 10
007             For 枝番 As Integer = 1 To 10
008                 Dim 新規行 As DataRow = 子テーブル.NewRow()
009                 新規行("番号") = 番号
010                 新規行("枝番") = 枝番
011                 新規行("数量") = 番号 * 100 + 枝番
012                 子テーブル.Rows.Add(新規行)
013             Next
014         Next
015 
016 
017         Dim 親テーブル As New DataTable
018         親テーブル.Columns.Add(New DataColumn("番号"))
019         親テーブル.Columns.Add(New DataColumn("数量計", GetType(Decimal)))
020         For 番号 As Integer = 1 To 10
021             Dim 新規行 As DataRow = 親テーブル.NewRow()
022             新規行("番号") = 番号
023             親テーブル.Rows.Add(新規行)
024         Next
025 
026         Dim ds As New DataSet
027         ds.Tables.Add(子テーブル)
028         ds.Tables.Add(親テーブル)
029 
030         Dim 番号でグループ化するためのリレーション As New DataRelation("サンプル", 親テーブル.Columns("番号"), 子テーブル.Columns("番号"))
031 
032         親テーブル.ChildRelations.Add(番号でグループ化するためのリレーション)
033         親テーブル.Columns("数量計").Expression = "SUM(Child.数量)"
034 
035         For Each 現在行 As DataRow In 親テーブル.Rows
036             Console.WriteLine(String.Format("番号:{0} 数量計:{1}", 現在行("番号"), 現在行("数量計")))
037         Next
038 
039 

正直な話親のDataTableを作ろうと思ったら結局ループ処理が必要になるので、expressionを実際に使った事は無い。

ただ、こういう事もできるという話。

でも、最初から、親テーブルも子テーブルもあるなら、使えるかも。

Share