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

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

(.Net)ActiveReports Datail で最終行の Line を表示

(.Net)ActiveReports でグループヘッダセクションをページ毎に出力させるの続きになります。

この記事でやったように、GroupHeader,GroupFooter を PageHeader,PageFooter 代わりに使っており、5行おきに横方向のLineを引くという仕様にしていると、最終行が5行毎ではないときに、横方向の Line が表示できません。

こんな感じです。

ということで最終行の Line を引くにはどうしたらいいかいろいろ悩みましたが、結局 DataSourceChanged イベントが起こったときに、データソースの行件数をメンバ変数に持ち、Datail セクションで、最終行のときだけ最終行用 Line を表示するということにしました。

コードはこんな感じです。

Imports DataDynamics.ActiveReports 

Imports DataDynamics.ActiveReports.Document

 

Public Class ActiveReportsTest

' 件数カウンタ

Private m_intRowNumber As Integer

'データの件数

Private m_intNumData As Integer

 

'''

''' [イベントハンドラ] 詳細セクションのフォーマットイベント

'''

Private Sub Detail_Format(ByVal sender As Object, ByVal e As System.EventArgs) Handles Detail.Format

 

m_intRowNumber = m_intRowNumber + 1

 

'最終行ならLineを引く

If m_intRowNumber = m_intNumData Then

Me.PageLastLine.Visible = True

End If

 

If m_intRowNumber < 45 Then

' 件数が45件に満たない場合、改ページは行いません。

Me.Detail.NewPage = NewPage.None

Else

' 45件出力した後、改ページを行い、カウンタをリセットします。

Me.Detail.NewPage = NewPage.After

m_intRowNumber = 0

End If

 

'5行おきにLine

If m_intRowNumber Mod 5 = 0 Then

Me.SeparatorLineFive.Visible = True

Else

Me.SeparatorLineFive.Visible = False

End If

 

End Sub

 

'''

''' [イベントハンドラ]データソースが変更されたとき

'''

Private Sub UseReport_DataSourceChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DataSourceChanged

 

If TypeOf Me.DataSource Is DataTable Then

'行数をメンバ変数に持つ

m_intNumData = DirectCast(Me.DataSource, DataTable).Rows.Count

End If

 

End Sub

End Class

ただ、この例だと DataSource に渡すオブジェクトは必ず DataTable でないといけないです。その他のオブジェクトを渡す可能性があるのなら、それ毎の処理が必要になります。

結果はこうなります。

追記:

最初、最終行の横線が表示されてないとき、GourpFooter の PrintAtBottom プロパティが True でした。

このプロパティを False にすると、GroupFototer 上の横線で、要件が達成できます。

ということに気付き、結局上記の作業は無駄に。。。