C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: AccessDataSourceの絞込み件数の表示法


(過去ログ 72 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■41915 / inTopicNo.1)  AccessDataSourceの絞込み件数の表示法
  
□投稿者/ サトシ (15回)-(2009/10/03(Sat) 16:14:37)

分類:[ASP.NET (VB)] 

2009/10/03(Sat) 16:17:46 編集(投稿者)
以前AccessDataSourceのデータの絞込み方法の件でお世話になった
http://bbs.wankuma.com/search.cgi?no=0&word=GridView%82%CC%8Di%8D%9E%82%DD%95%5C%8E%A6&andor=and&logs=70.txt&PAGE=20
続きの質問です。

データをWHEREで絞り込んだ結果の件数を表示したいのですがうまくいきません。
ググッたのですが、参考情報を見付けることができませんでした。
AccessDataSource1.SelectParameters.Countかな?と試してみたのですが
3件ヒットしたときは「1件」を、全件表示時は「0件」を表示します。

LabelにWHEREで絞り込んだ結果のヒット件数を表示する方法をアドバイス頂けると助かります。
よろしくお願いします。

VWD2005(VB) + Access2003

MeiboTable
|ID| namae  |
| 1|佐藤一郎|
| 2|佐藤次郎|
| 3|佐藤三郎|
| 4|鈴木一郎|
| 5|鈴木次郎|
| 6|鈴木三郎|

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If (TextBox1.Text <> "") Then
        'TextBox1が空でないならば、条件検索を行う。 
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable] WHERE (namae LIKE @namae)"

        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()

        'パラメータをセット 
        '@は必要ないです。 
        AccessDataSource1.SelectParameters.Add("namae", "%" & TextBox1.Text & "%")

    Else
        'TextBoxが空ならば、全件検索 
        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable]"
    End If
    Label1.Text = AccessDataSource1.SelectParameters.Count.ToString & " 件がヒットしました"

End Sub

引用返信 編集キー/
■41918 / inTopicNo.2)  Re[1]: AccessDataSourceの絞込み件数の表示法
□投稿者/ やじゅ (1362回)-(2009/10/03(Sat) 18:00:16)
やじゅ さんの Web サイト
No41915 (サトシ さん) に返信
> AccessDataSource1.SelectParameters.Countかな?と試してみたのですが

それは、パラメータの数だから・・・ SelectParameters.Add とかしている件数ね。

> LabelにWHEREで絞り込んだ結果のヒット件数を表示する方法をアドバイス頂けると助かります。
バインド先の件数を数えるとかになるかな、例えばGridViewにバインドしたなら、GridView1.Rows.Count

または、SELECT COUNT(*) FROM xxxx  と件数を別個に取得するとか

引用返信 編集キー/
■41919 / inTopicNo.3)  Re[2]: AccessDataSourceの絞込み件数の表示法
□投稿者/ サトシ (16回)-(2009/10/03(Sat) 19:28:56)
No41918 (やじゅ さん) に返信
やじゅさん、いつもありがとうございます。
> バインド先の件数を数えるとかになるかな、例えばGridViewにバインドしたなら、GridView1.Rows.Count

結果はGridViewに表示しているので、GridView1.Rows.Countで絞り込み結果の件数が取れました。
ありがとうございました。

しかし表示が少しおかしいのです。
最初は、6行表示され「6 件がヒットしました」のメッセージ
「一郎」で検索すると、2行表示され「6 件がヒットしました」のメッセージ
次に「佐藤」で検索すると、3行表示され「2 件がヒットしました」のメッセージ
次に「一郎」で検索すると、2行表示され「3 件がヒットしました」のメッセージ
次に空白で検索すると、6行表示され「2 件がヒットしました」のメッセージ

と一つ前の検索結果がメッセージ表示されてしまいます。
原因が思いつきません。アドバイス頂けるとありがたいです。
よろしくお願いします。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If (TextBox1.Text <> "") Then
        'TextBox1が空でないならば、条件検索を行う。 
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable] WHERE (namae LIKE @namae)"

        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()

        'パラメータをセット 
        '@は必要ないです。 
        AccessDataSource1.SelectParameters.Add("namae", "%" & TextBox1.Text & "%")

    Else
        'TextBoxが空ならば、全件検索 
        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable]"
    End If
    Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"
    
End Sub

引用返信 編集キー/
■41922 / inTopicNo.4)  Re[3]: AccessDataSourceの絞込み件数の表示法
□投稿者/ やじゅ (1363回)-(2009/10/03(Sat) 21:44:37)
やじゅ さんの Web サイト
No41919 (サトシ さん) に返信
> と一つ前の検索結果がメッセージ表示されてしまいます。
> 原因が思いつきません。アドバイス頂けるとありがたいです。
> Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"

タイミングの問題です。

AccessDataSource1に設定をセットしただけで、SQLが実行されたわけではないです。
SQLが実行していないわけですから、当然1つ前の件数で表示されますね。

設定したSQLを実行するのは、バインド先のGridViewが処理するときです。

引用返信 編集キー/
■41926 / inTopicNo.5)  Re[4]: AccessDataSourceの絞込み件数の表示法
□投稿者/ サトシ (17回)-(2009/10/04(Sun) 08:16:33)
No41922 (やじゅ さん) に返信
やじゅさん、お返事ありがとうございます。
> AccessDataSource1に設定をセットしただけで、SQLが実行されたわけではないです。
> SQLが実行していないわけですから、当然1つ前の件数で表示されますね。
> 
> 設定したSQLを実行するのは、バインド先のGridViewが処理するときです。

GridView1_DataBound()に
Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"
を記述する事で希望する動作が出来る様になりました。ありがとうございました。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    If (TextBox1.Text <> "") Then
        'TextBox1が空でないならば、条件検索を行う。 
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable] WHERE (namae LIKE @namae)"

        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()

        'パラメータをセット 
        '@は必要ないです。 
        AccessDataSource1.SelectParameters.Add("namae", "%" & TextBox1.Text & "%")

    Else
        'TextBoxが空ならば、全件検索 
        'パラメータをクリア 
        AccessDataSource1.SelectParameters.Clear()
        AccessDataSource1.SelectCommand = "SELECT [ID], [namae] FROM [MeiboTable]"
    End If
    
End Sub

Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
    Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"

End Sub

解決済み
引用返信 編集キー/
■41927 / inTopicNo.6)  Re[5]: AccessDataSourceの絞込み件数の表示法
□投稿者/ やじゅ (1364回)-(2009/10/04(Sun) 09:32:51)
やじゅ さんの Web サイト
No41926 (サトシ さん) に返信

別の方法で件数を取得する方法を見つけたのでリンクしておきます。
Selectedイベントで、e.AffectedRowsで件数が取得できるようです。
http://d.hatena.ne.jp/pink-woof/20080221

Selected:データ取得操作が完了したときに発生します。
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.accessdatasource_events(VS.80).aspx
解決済み
引用返信 編集キー/
■41928 / inTopicNo.7)  Re[5]: AccessDataSourceの絞込み件数の表示法
□投稿者/ まさる (93回)-(2009/10/04(Sun) 09:49:50)
まさる さんの Web サイト
No41926 (サトシ さん) に返信
> Label1.Text = GridView1.Rows.Count.ToString & " 件がヒットしました"
> を記述する事で希望する動作が出来る様になりました。ありがとうございました。

別解ですが、String.Formatメソッドを用いることで、どのようなテキストが設定されるかわかりやすくなります。

--
Label1.Text = String.Format("{0} 件がヒットしました", GridView1.Rows.Count)
--

解決済み
引用返信 編集キー/
■41930 / inTopicNo.8)  Re[6]: AccessDataSourceの絞込み件数の表示法
□投稿者/ サトシ (18回)-(2009/10/04(Sun) 18:43:06)
やじゅさん
> 別の方法で件数を取得する方法を見つけたのでリンクしておきます。
> Selectedイベントで、e.AffectedRowsで件数が取得できるようです。
> http://d.hatena.ne.jp/pink-woof/20080221
>
> Selected:データ取得操作が完了したときに発生します。
> http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.accessdatasource_events(VS.80).aspx

別解情報、非常にありがたいです。
都合、3種の解あり、ですね。
1.GridView1.Rows.Countで取得
2.Selectedイベントで、e.AffectedRowsで取得
3.SQLのSELECT COUNT(*) FROM xxxx  で別個に取得


まさるさん
> 別解ですが、String.Formatメソッドを用いることで、どのようなテキストが設定されるかわかりやすくなります。
> --
> Label1.Text = String.Format("{0} 件がヒットしました", GridView1.Rows.Count)

ひと目見てわかり易いコードを書いておく。と言うことは非常に重要ですね。
今後は、画面表示情報はStrig.Format書式を利用し、表示イメージがひと目でわかる表現にします。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -