DOBON.NET DOBON.NETプログラミング掲示板過去ログ

[ActiveReports]特定行の非表示について

環境/言語:[[VS2005][ActiveReport.NET2 StandardEdition]]
分類:[.NET]

2007/02/23(Fri) 18:29:08 編集(投稿者)

はじめまして、kusakabeと申します。ActiveReportsを初めて
使用したのですが、調べてもよく分からない点があったので
質問させてください。

■質問内容
 1つのコードによりグルーピングされたデータをdatasourceにセットし
出力する帳票を作成しています。基本情報をグループヘッダに出力し
明細情報をdetailに出力する基本的な帳票です。

 その際、detailに出力される明細情報を、特定の条件を満たす行に
さしかかったら、非表示にすることはできますでしょうか?

 一応grapecityや、どぼん!様の過去ログを検索したのですが
「特定のオブジェクトの非表示(TextBoxだけ等)」は確認できたのですが
detailの1行を非表示というのは確認できませんでした。
 details.visibleとかも試したのですが、よく考えたらdetailsの中の
特定行に対して設定するプロパティではないと思いあたりました…。
もし何か方法がありましたら教えてください。よろしくお願いします。

■仕様の例
・データ例
コード,管理ID,個数
0001,01,200
0001,02,200
0001,03,100
0002,01,100


・出力例
 (Code[0001]のグループから、個数を合計で300減らしたことを示す帳票)
コード,管理Id,個数,減少数,結果
@0001,01,200,-200,0
A0001,02,200,-100,100
B0001,03,100,0,100
C0002,01
D…
0002,01,100

★この例でBのデータは、数量に動きがないので非表示にしたい。
※なお現在はdetail_BeforePrintで、個数+減少数=結果、を計算して表示しています。
 減少数が0になったかどうかの判定も同イベントにて制御しようと思っていました。
■No19155に返信(kusakabeさんの記事)
>  一応grapecityや、どぼん!様の過去ログを検索したのですが
> 「特定のオブジェクトの非表示(TextBoxだけ等)」は確認できたのですが
> detailの1行を非表示というのは確認できませんでした。

セクション単位でどうこうはできませんので、レコード単位で出力しないようにする考えにしましょう。
条件が決まっているなら、クエリを使っても良いですね。
■No19156に返信(じゃんぬねっとさんの記事)
>>「特定のオブジェクトの非表示(TextBoxだけ等)」は確認できたのですが
>>detailの1行を非表示というのは確認できませんでした。
>
> セクション単位でどうこうはできませんので、
> レコード単位で出力しないようにする考えにしましょう。
> 条件が決まっているなら、クエリを使っても良いですね。

じゃんぬねっと様、初歩的な質問にも関わらずご返信頂きありがとうございます!
やっぱりセクション単位では無理ですか…了解です!条件は固定ではないうえに
ちょっと面倒になりそうなのでDataTable自体を編集しようと思います。

もしそんな機能あったら取得データを編集しなくてもいいかなぁ…と
楽したい一心で技術情報を探してたら、普通にコーディングするより時間を
かけてしまいました…納期がぁ…、…話がずれて失礼しました。

ともあれ、できないってわかっただけで十分知識となりました!
また、方針まで示して頂きありがとうございました。頑張って勉強します。
こんばんは。Samといいます。
条件が分かっていれば、出力しないレコードを初めから
取得しないようにするのがスマートでしょうね。
その他、ActiveReportsのほうで特定のレコードの出力を
飛ばす方法としてはLayoutActionプロパティというものが
あります。
試してませんが、LayoutActionプロパティを使うと、
そのレコードを出力しないで、次のレコードを出力するように
できるかもしれません。

ActiveReports.LayoutAction = 4

なおヘルプによると、このプロパティは、Detailセクションの
Formatイベントでのみ使用できます、だそうです。
Sam様返信ありがとうございます。

> 条件が分かっていれば、出力しないレコードを初めから
> 取得しないようにするのがスマートでしょうね。
> その他、ActiveReportsのほうで特定のレコードの出力を
> 飛ばす方法としてはLayoutActionプロパティというものが
> あります。
> 試してませんが、LayoutActionプロパティを使うと、
> そのレコードを出力しないで、次のレコードを出力するように
> できるかもしれません。
このような方法もあるのですね。ちょっと時間がなくなってしまい
結局取得データを変更するようにしてしまったのですが、この手段も
いけるか確認したいと思います。後程検証結果を書き込ませていただきます。
ありがとうございました!
解決済み!
2007/03/09(Fri) 09:47:04 編集(投稿者)
2007/03/09(Fri) 09:47:00 編集(投稿者)

今回の作業はデータの整形で済ませてしまったのですが
やっと仕事が一段楽したので、心残りになっていたLayoutActionを試しました。
つたない結果ですがご報告いたします。ヘルプそのままの点が多いですが…。

■LayoutAction
セクションのFormatイベント発生時に実行するアクションを指定します。
以下3つのプロパティのintegerの値を加算して、組み合わせて実行できるようです。
ちなみにデフォルトでの設定値は「7」でした。(1+2+4ですね)

1:DataDynamics.ActiveReports.LayoutAction.PrintSection
→セクションが出力される

2:DataDynamics.ActiveReports.LayoutAction.MoveLayout
→レイアウト位置が(ページ上の)次の出力位置に移動します。(意図的に空白行を作れる)

4:DataDynamics.ActiveReports.LayoutAction.NextRecord
→次のレコードに進む。


Sam様が提案してくださった方法は「次のレコードに進む」だったのですね。
この方法でも実現できました。いろいろできるんですね。
じゃんぬねっと様、Sam様、貴重なことを教えていただき本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板