はい、まさにこれです。ありがとうございました。
#@ITはよく参考にしていましたが、会議室があることを失念していました。
さっそく試してみました。
最初は、DB処理が2回になることを避けたくてこちらのスレッドの方法を試してみました。http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30536&forum=7&4
Protected Sub ObjectDataSource1_Selected(ByVal sender As Object, ByVal e As _
System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles ObjectDataSource1.Selected
Label1.Text = e.AffectedRows & "件のデータが検索されました。"
End Sub
ところがObjectDataSourceコントロールの場合には、SelectedされただけではいわゆるBOFの状態らしく、レコード件数として「-1」が返ってきてしまいました。
(SqlDataSourceコントロールならば正しく全レコード数が取得できます)
そこでDataViewを使用することにしましたが、こんどはどのタイミングで上の処理を実行するか悩みました。
(うっかり、ObjectDataSourceのSelectedイベントの中で実行したところ、無限再帰ループに陥ってしまいました。)
結局、抽出条件が変わったときのみ件数を取得すればよいので、検索用ボタンのクリックイベントで、ObjectDataSourceにFilterExpressionを設定した直後に実行することにして、以下のようなコードになりました。
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim where As String = "true"
If TextBox1.Text <> "" Then
where &= " and 予価 " & DropDownList1.SelectedValue & TextBox1.Text
'DropDouwnList1には、「=、<、>」が設定してあります
End If
If DropDownList2.SelectedValue <> "all" Then
where &= " and 出版社 = '" & DropDownList2.SelectedValue & "'"
End If
ObjectDataSource1.FilterExpression = where
Label1.Text = DirectCast(ObjectDataSource1.Select, Data.DataView).Count & "件のデータが検索されました。"
End Sub