- PR -

データテーブルのグループ化

投稿者投稿内容
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-10 11:12
こんにちは。

NAL-6295 さんと同じように Expression プロパティで設定したものを View
で条件付けてあげればなんとか…と思っていましたが、View に条件をつけても
Expression を設定した列の内容は変わらないのですな
代替案として、無理やりですがこんな感じを。

とりあえずこんな感じにテーブル(仮に dataTable としておきます)に列を追加
して

コード:

dataTable.Columns.Add("合計条件", typeof(int));
dataTable.Columns["合計条件"].Expression = "IIF([名前コード]>=100, [金額], 0)";
dataTable.Columns.Add("金額合計", typeof(int));
dataTable.Columns["金額合計"].Expression = "SUM([合計条件])";


合計条件の Expression プロパティを書き換えてやれば、あとは金額合計列
の内容を取得するだけで何とかできそうな気がします。
グループ化…は難しそうなので、その辺だけは for ループで
日付も条件に入れてあげないといけないかな。

とりあえずこんな感じでいかがでしょうか。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
会議室デビュー日: 2006/07/20
投稿数: 9
投稿日時: 2006-10-10 21:45
みなさん返答ありがとうございます。

かるあさん
引用:
こんな HOW TO がありました。
HOW TO: Implement a DataSet GROUP BY Helper Class in Visual C# .NET
http://support.microsoft.com/kb/326145/EN-US/


今後のことも考えて、上記のページを参考に実装したらうまくいきました。

NAL-6295さん、ぽぴ王子さん
引用:
Expression プロパティ…


こんな方法があるなんて知らなかったです。
グループ化しなくてもいい所はこれでいこうと思います。

大変参考になりました。ありがとうございました。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-10-10 23:39
引用:

ぽぴ王子さんの書き込み (2006-10-10 11:12) より:
こんにちは。

NAL-6295 さんと同じように Expression プロパティで設定したものを View
で条件付けてあげればなんとか…と思っていましたが、View に条件をつけても
Expression を設定した列の内容は変わらないのですな
代替案として、無理やりですがこんな感じを。

とりあえずこんな感じにテーブル(仮に dataTable としておきます)に列を追加
して

コード:

dataTable.Columns.Add("合計条件", typeof(int));
dataTable.Columns["合計条件"].Expression = "IIF([名前コード]>=100, [金額], 0)";
dataTable.Columns.Add("金額合計", typeof(int));
dataTable.Columns["金額合計"].Expression = "SUM([合計条件])";


合計条件の Expression プロパティを書き換えてやれば、あとは金額合計列
の内容を取得するだけで何とかできそうな気がします。
グループ化…は難しそうなので、その辺だけは for ループで
日付も条件に入れてあげないといけないかな。

とりあえずこんな感じでいかがでしょうか。




グループキーに相当する項目を持った親DataTableを作成して
対象となる子DataTableとDataRelationを利用して連結することで、
グループキーによる集計も可能です。
ただ親DataTableにも存在するグループキー分のデータが必要に
なるし、結構めんどくさいです。
ただ、そういう事もできると言うことで、実際にexpression列を
使った事はありません。

以下、できるよーというサンプルコード

コード:
        Dim 子テーブル As New DataTable
        子テーブル.Columns.Add(New DataColumn("番号"))
        子テーブル.Columns.Add(New DataColumn("枝番"))
        子テーブル.Columns.Add(New DataColumn("数量", GetType(Decimal)))

        For 番号 As Integer = 1 To 10
            For 枝番 As Integer = 1 To 10
                Dim 新規行 As DataRow = 子テーブル.NewRow()
                新規行("番号") = 番号
                新規行("枝番") = 枝番
                新規行("数量") = 番号 * 100 + 枝番
                子テーブル.Rows.Add(新規行)
            Next
        Next


        Dim 親テーブル As New DataTable
        親テーブル.Columns.Add(New DataColumn("番号"))
        親テーブル.Columns.Add(New DataColumn("数量計", GetType(Decimal)))
        For 番号 As Integer = 1 To 10
            Dim 新規行 As DataRow = 親テーブル.NewRow()
            新規行("番号") = 番号
            親テーブル.Rows.Add(新規行)
        Next

        Dim ds As New DataSet
        ds.Tables.Add(子テーブル)
        ds.Tables.Add(親テーブル)

        Dim 番号でグループ化するためのリレーション As New DataRelation("サンプル", 親テーブル.Columns("番号"), 子テーブル.Columns("番号"))

        親テーブル.ChildRelations.Add(番号でグループ化するためのリレーション)
        親テーブル.Columns("数量計").Expression = "SUM(Child.数量)"

        For Each 現在行 As DataRow In 親テーブル.Rows
            Console.WriteLine(String.Format("番号:{0} 数量計:{1}", 現在行("番号"), 現在行("数量計")))
        Next


スキルアップ/キャリアアップ(JOB@IT)