- PR -

RowFilter の奇妙な現象

1
投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-01-15 18:32
こんばんは。

どうしても解決できないことが、もう1点だけありまして
お力添えをお願いします。

VB2005+ActiveReportNET2.0の環境です。

DataViewをFilterして
その結果をサブレポートに渡し印刷します。

そこで奇妙な現象が起こってしまうのです。

まずコードです。

DataView .RowFilter = Nothing
Dim Subr As New RPTSub
'
DataView.RowFilter = "KMK = '" & fldKMK.Text & "'"
If DataView.Count > 0 Then
Subr.DataSource = DataView
Me.SubrKMK.Report = Subr
END IF

処理としましては
fldKMK.Textが A の時 Aの値でDataView.RowFilterし、データをサブレポートに渡します。
次に fldKMK.Textが B の時 Bの値でDataView.RowFilterし、データをサブレポートに渡します。

どうい時に奇妙な現象が起きるのかといいますと
DataViewにAのデータが無い時、BはFilterはかかるのですが印刷されないのです。

サブレポートのReportStartイベントが発生しないのです。

If DataView.Count > 0 ThenとEND IFをコメントすると
正しくBのサブレポートは印刷されます。

またA,Bのデータが両方ある場合はA,Bとも正しくサブレポートは印刷されます。

DataView.CountはMsgBoxで表示させても6件になります。

今まで何度かDataView .RowFilteを使ってきましたが、このような現象は初めてです。

どういうことなのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-15 18:44
引用:

LANVINさんの書き込み (2008-01-15 18:32) より:

そこで奇妙な現象が起こってしまうのです。
まずコードです。

DataView .RowFilter = Nothing
Dim Subr As New RPTSub
'
DataView.RowFilter = "KMK = '" & fldKMK.Text & "'"
If DataView.Count > 0 Then
Subr.DataSource = DataView
Me.SubrKMK.Report = Subr
END IF

処理としましては
fldKMK.Textが A の時 Aの値でDataView.RowFilterし、データをサブレポートに渡します。
次に fldKMK.Textが B の時 Bの値でDataView.RowFilterし、データをサブレポートに渡します。

どうい時に奇妙な現象が起きるのかといいますと
DataViewにAのデータが無い時、BはFilterはかかるのですが印刷されないのです。
サブレポートのReportStartイベントが発生しないのです。

If DataView.Count > 0 ThenとEND IFをコメントすると
正しくBのサブレポートは印刷されます。


これだけですと Filter のせいなのかサブ レポートのせいなのか切り分けが難しくないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-01-15 19:05
じゃんぬねっとさん、すいません。

Detail_Formatで記述しているコードです。

If DataView.Count > 0 Then
'** DataView.Count をMsgBoxで表示させると6と表示
Subr.DataSource = DataView
Me.SubrKMK.Report = Subr
END IF

サブレポートの
RPTSub_ReportStartイベントでDebug.Print("ReportStart")と
してもDebugされません。

If DataView.Count > 0 ThenとEND IFをコメントすると
Debugされます。

すいません、解りにくく・・

すいません、説明不足で・・







じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-15 19:15
引用:

LANVINさんの書き込み (2008-01-15 19:05) より:

If DataView.Count > 0 Then
'** DataView.Count をMsgBoxで表示させると6と表示
Subr.DataSource = DataView
Me.SubrKMK.Report = Subr
END IF

If DataView.Count > 0 ThenとEND IFをコメントするとDebugされます。


このご説明ですと "If DataView.Count > 0 Then" の行と "End If" の行をコメントアウトしようとしよまいが、

引用:

Subr.DataSource = DataView
Me.SubrKMK.Report = Subr


の 2 行は実行されているということになります。 確かにそれはヘンですね。 奇妙です。 ありえるとすれば MessageBox を表示されている間に非同期な箇所が同期してうまくいっている (ように見える) というところでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2008-01-15 19:26
ありがとうございます。

If DataView.Count > 0 ThenとEND IFをコメントする、しないだけですので

Subr.DataSource = DataView
Me.SubrKMK.Report = Subr
の2行は必ず実行されます。

それとA,B両方ある場合は
If DataView.Count > 0 ThenとEND IFをコメントしなくても
印刷します。

どういうことなのでしょうか・・・


1

スキルアップ/キャリアアップ(JOB@IT)