none
データソースで取得したレコードの件数を知るには? RRS feed

  • 質問

  • はじめまして。お世話になります。

    ObjectDataSourceとGridViewを使用して、データを表示しています。

    抽出条件を変えて検索してるため、ヒットした件数を知りたいと思うのですが、
    何件抽出されたかを知る方法がわからなくて悩んでいます。

    ページングをしているため、GridViewのRows.Countではカレントページの行数
    (つまり、最終ページ以外では「=PageSize」)しか取得することができませんでした。

    何か適切なプロパティまたはメソッドはありませんでしょうか。

    2006年8月26日 9:24

回答

すべての返信

  • こういう感じですよね。

    GridViewの総レコード数の取得について
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31317&forum=7&3

    2006年8月26日 13:53
    モデレータ
  • はい、まさにこれです。ありがとうございました。
    #@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

    2006年8月27日 10:22