3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)AcriveReportsで行ごと、列ごと、全体の集計をしたい

今回出したいレポートは下記のよう感じです。

青枠で囲っているところが、バインドする DataTable に入っている値です。

赤枠の部分を ActiveReports 側で集計させます。

デザイナでの配置は下記のような感じです。

データは下記のように作成しています。(レポート作成部分です)

Dim frm As New frmReport()      'レポート結果表示するフォーム

Dim dtbl_age As New DataTable() 'レポートにバインドするデータ

Dim cl_age1 As New DataColumn("RowTitle")

Dim cl_age2 As New DataColumn("MaleNum", Type.GetType("System.Int32"))

Dim cl_age3 As New DataColumn("WomanNum", Type.GetType("System.Int32"))

Dim cl_age4 As New DataColumn("OtherNum", Type.GetType("System.Int32"))

dtbl_age.Columns.Add(cl_age1)

dtbl_age.Columns.Add(cl_age2)

dtbl_age.Columns.Add(cl_age3)

dtbl_age.Columns.Add(cl_age4)

'テストデータ作成

For i As Integer = 0 To 4

Dim row_age As DataRow = dtbl_age.NewRow()

row_age("RowTitle") = i.ToString() + "行目"

row_age("MaleNum") = i

row_age("WomanNum") = i + 1

row_age("OtherNum") = 1

dtbl_age.Rows.Add(row_age)

Next

レポート作成

Dim rpt_age As New AgeDistributionReport()

rpt_age.DataSource = dtbl_age

rpt_age.Run()

frm.Viewer.Document = rpt_age.Document

frm.Show()

最初は各行の合計を DataField で "= 列1のDataField + 列2のDataField + 列3DataField " という感じでやっていたのですが、これだと合計の合計(一番右下)が出せません。

ということで、下記のように新しい total というフィールドを作成し、1行フェッチするたびに、行の合計を total フィールドに格納するようにしました。

'''

''' 初期化

'''

Private Sub rptSummary_DataInitialize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.DataInitialize

'total フィールド追加

Me.Fields.Add("total")

End Sub

 

'''

''' データをフェッチしたとき

'''

Private Sub rptSummary_FetchData(ByVal sender As Object, ByVal eArgs As DataDynamics.ActiveReports.ActiveReport3.FetchEventArgs) Handles MyBase.FetchData

'合計フィールドに1行の各列の合計値を格納

Me.Fields("total").Value = Me.Fields("MaleNum").Value + Me.Fields("WomanNum").Value + Me.Fields("OtherNum").Value

End Sub

また、最下行の合計行(これはグループセクションを使用)はそれぞれの DataField プロパティに下記のように設定し集計を指定します。

男の合計表示 → MaleNum

女の合計表示 → WomanNum

その他合計表示 → OtherNum

合計の合計表示 → total

なお、上記の4つともサマリーに関するプロパティは下記の通りです。

SummaryGroupu: GroupHeader1

SummaryRunning: Group

SummaryType: SubTotal