人気ブログランキング | 話題のタグを見る
(.Net)ActiveReports Datail で最終行の Line を表示
(.Net)ActiveReports でグループヘッダセクションをページ毎に出力させるの続きになります。
この記事でやったように、GroupHeader,GroupFooter を PageHeader,PageFooter 代わりに使っており、5行おきに横方向のLineを引くという仕様にしていると、最終行が5行毎ではないときに、横方向の Line が表示できません。

こんな感じです。
(.Net)ActiveReports Datail で最終行の Line を表示_e0091163_18374856.jpg


ということで最終行の Line を引くにはどうしたらいいかいろいろ悩みましたが、結局 DataSourceChanged イベントが起こったときに、データソースの行件数をメンバ変数に持ち、Datail セクションで、最終行のときだけ最終行用 Line を表示するということにしました。
コードはこんな感じです。
Imports DataDynamics.ActiveReports 
Imports DataDynamics.ActiveReports.Document
 
Public Class ActiveReportsTest
' 件数カウンタ
Private m_intRowNumber As Integer
'データの件数
Private m_intNumData As Integer
 
''' <summary>
''' [イベントハンドラ] 詳細セクションのフォーマットイベント
''' </summary>
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
 
''' <summary>
''' [イベントハンドラ]データソースが変更されたとき
''' </summary>
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 でないといけないです。その他のオブジェクトを渡す可能性があるのなら、それ毎の処理が必要になります。

結果はこうなります。
(.Net)ActiveReports Datail で最終行の Line を表示_e0091163_1838546.jpg



追記:
最初、最終行の横線が表示されてないとき、GourpFooter の PrintAtBottom プロパティが True でした。
このプロパティを False にすると、GroupFototer 上の横線で、要件が達成できます。
ということに気付き、結局上記の作業は無駄に。。。
by jehoshaphat | 2009-03-13 18:38 | .Net開発


<< (SQL)Access(JET... (.Net)DataTable... >>