(.Net)ActiveReports Datail で最終行の Line を表示
(.Net)ActiveReports でグループヘッダセクションをページ毎に出力させるの続きになります。
この記事でやったように、GroupHeader,GroupFooter を PageHeader,PageFooter 代わりに使っており、5行おきに横方向のLineを引くという仕様にしていると、最終行が5行毎ではないときに、横方向の Line が表示できません。
こんな感じです。
ということで最終行の Line を引くにはどうしたらいいかいろいろ悩みましたが、結局 DataSourceChanged イベントが起こったときに、データソースの行件数をメンバ変数に持ち、Datail セクションで、最終行のときだけ最終行用 Line を表示するということにしました。
コードはこんな感じです。
Imports DataDynamics.ActiveReportsImports 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 上の横線で、要件が達成できます。
ということに気付き、結局上記の作業は無駄に。。。