ASP.NetでのGridViewのデータソースのSQL文変更とページング、ソーティングの問題

このQ&Aのポイント
  • ASP.NetのGridViewで、SQLDataSourceのSQL文を変更する際、ページングやソーティングがうまく動作しない問題が発生しています。
  • SQLDataSourceに指定したSQL文でGridViewのデータを表示することはできますが、ページングやソーティングを行うと元のSQL文のデータが適応されてしまいます。
  • 動的なSQL文をGridViewに適応し、ソーティングやページングも正しく動作させる方法を教えていただきたいです。
回答を見る
  • ベストアンサー

SQLDataSourceのSQL文を変えて・・・

ASP.Net にて日々壁が立ち上がっております。 GridView のデータソースであるSQLDataSourceのSQL文を変更し、尚且つページング、ソーティングも行いたいと思うのですが、なかなかうまく行きません。 Dim SQL As String 条件が複雑なので、SQL には自作したSQL文が入っております。 Me.SqlDataSource.SelectCommand = SQL Me.SqlDataSource.DataBind() このように記述するとGridViewのデータはSQL文に指定した通りに表示されるのですが、ページング、ソーティングを行うと、元々SqlDataSourceに指定してあるSQL文のモノが適応されて表示画面も元データの適応になってしまいます。 何かのサイトでこういう場合は DataSourceID をどうにかすると、ページング、ソーティングともに指定したSQL文のデータソース上で行われるみたいなことが書かれていたのですが、どう記述してよいかわかりません。 例えば・・・ Me.GridView.DataSourceID = "" Me.GridView1.DataBind() Me.GridView1.DataSourceID = Me.SqlDataSource.ID Me.GridView1.DataBind() こんな記述をしてみても、ページング、ソーティングはうまく動作しません。 動的なSQL文をGridViewに適応でき、ソーティング、ページングも適応させるにはどうしたらよいでしょうか? GridView にそういう事が簡単にできれば非常に使い勝手が良いのですが、 初心者的な考えなのかもしれませんが、何卒ご教授いただければと存じます。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

SQLDataSourceコントロールてのは、データソースコントロールの中で一番簡単なコントロールなので、凝ったデータアクセスには向いていません。 ページング取得など、全件取得した後でページング部分を抽出するロジックであり、ある程度のデータ量を超えると、トラフィックが巨大になって使えないと思います。 そのあたりも含め、データソースコントロールによるデータ処理については、以下の書籍を参考にされたらと思います。 .NET 2.0時代の書籍なので、最近はもっと進んでますが。。 Microsoft-Visual-Studio-2005によるWebアプリケーション構築技法 赤間信幸 著 http://www.amazon.co.jp/Microsoft-Visual-Studio-2005%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%A7%8B%E7%AF%89%E6%8A%80%E6%B3%95-%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E3%82%B3%E3%83%B3%E3%82%B5%E3%83%AB%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/product-reviews/4891005157/ref=sr_1_1_cm_cr_acr_txt?ie=UTF8&showViewpoints=1 で、今回望んでおられる、GridView + Paging / Sortingを解決するには、SQLDataSourceではなく、カスタムSQLに対応できるObjectDataSourceが正解だと思います。 また、GridViewのページャについても、自動処理ではなく、正しく部分抽出SQLをハンドリングできる設定が必要です。 このあたりのサンプルを学習してください。 http://www.codeproject.com/Articles/13963/Implement-Paging-using-ObjectDataSource-with-GridV http://www.codeproject.com/Articles/42043/Optimized-Paging-and-Sorting-using-Object-Data-Sou http://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_10/vs2005webapp_10_01.html

関連するQ&A

  • 【ASP.net】SqlDataSourceについて

    【ASP.net】SqlDataSourceについて index.aspxページにSqlDataSource1とGridView1と検索ボタンをセットし、 検索ボタンが押されると、SqlDataSource1にセットしているSQLにWHERE文を 追記して、GridView1を再表示させたいのですが、どのようにすれば良いのでしょうか? 現在のソースです・・・。 Dim Str As String = SqlDataSource1.SelectCommand Dim StrSql As String = "" StrSql = " WHERE lbl = ららら " Str = Str & StrSql SqlDataSource1.SelectCommand = Str GridView1.DataSource = SqlDataSource1.SelectCommand GridView1.DataBind() この状態だと、SQL文がBindされてしまい、DBから値がとれません。 解る方いらっしゃいましたらご教授お願いします。

  • 【ASP.NET】DataSetをSqlDataSourceに組み込めますか?

    ASP.NET Visual Studio 2005で開発を行っています。 GridViewのページングの機能を使用するには、「SqlDataSource」や「ObjectDataSource」を使用しないと有効にならないと思いますが、データベースがDataSetになっています。 この状態から、GridViewにデータをバインドし、ページングを有効にさせるには、どうしたらよいでしょうか?? SqlDataSourceにDataSetを持っていくという方法が調べても、分かりませんでした。 以下が使用しているソースです。 これですと、ページングが有効にならず、エラーになる状態です。 ============================================= Dim dSet As Data.DataSet = New Data.DataSet("データ") Dim dTbl As Data.DataTable Dim dRow As Data.DataRow dTbl = dSet.Tables.Add("データ") dTbl.Columns.Add("aaa", Type.GetType("System.String")) dRow = dTbl.NewRow() dRow("aaa") = "bbb" dTbl.Rows.Add(dRow) Me.GridView1.DataSource = dTbl Me.GridView1.DataBind() ====================================== どうぞ、宜しくお願いします。

  • SqlDataSourceについて

    現在Visual Web Developer 2008で開発を行っています。 そこで質問なのですが、DBよりSqlDataSourceを通してテーブルデータを読み込み、GridViewにて表示させています。 しかし、そのテーブルを結合しなくてはならなくなりました。この場合SqlDataSourceには複数のテーブルを選択することは出来ないのでしょうか? また出来ない場合はカスタムにしてSELECTタブにjoin等で結合したSQL文を書くことになるのでしょうか?それともコード上に記載するのでしょうか? よろしくお願いいたします。

  • SqlDataSource SelectCommand の書き方

    はじめまして。 現在aspx側でDBから読み込んだデータをGridViewに表示するプログラムを作っています。 環境 SQL Server 2005 Express Edition Visual Studio 2005 ASP.NET(VB) 初期表示として前の画面で選ばれた種別によってSQLが変わるので .aspxで <% dim s as string = "SELECT * FROM 台帳 " select case session("kind") case "A" s &= "WHERE 種別 LIKE '商品A%' " case "B" s &= "WHERE 種別 LIKE '商品B%'" case else ' 全種別を取得 end select hyo_1.SelectCommand = s & "ORDER BY 種別" %> <asp:SqlDataSource ID="hyo_01" runat="server" ConnectionString="<%$ ConnectionStrings:ConStr %>" /> と記述してみたのですが、結果は、何も表示されませんでした。 (順序を逆にしてみてもダメでした) この場合、<asp:SqlDataSource ~ /> で SelectCommand はクリアされてしまうのでしょうか? <asp:SqlDataSource ~ の中で SelectCommand="SELECT ~ " としたときに変数に入れたWHERE句を途中に埋め込むことがどうやってもできなかったので苦し紛れにやってみたのですが、、、 変数 whr="'商品A%'"として <asp:SqlDataSource ~ の中で SelectCommand="SELECT * FROM 台帳 WHERE 種別 LIKE <% = whr %> ORDER BY 種別" /> とするとエラーになってしまうし、いろいろ検索してみたのですが解決できませんでした。 SelectCommand の内容を場合によって変更するにはどのようにしたらよいのでしょうか? よろしくお願いいたします。

  • ASP.Net ObjectDataSource!

    お世話になります。 現在Access で作成されているアプリケーションをASP.Netに移植する為に日々精進しております。 GridView のデータソースを自由な感じでWhere条件にしたい事から、SQLDataSource から ObjectDataSource に切り替えた方が良いとのご指摘をうけ、現在作業を行っているのですが、問題が発生いたしました。 SQLDataSource ではSelectCommand に自作したSQL文を設定し、バインドすればGridView に反映できたのですが、 ObjectDataSource にはこのようなプロパティがないのですが、どのように設定すればよいのでしょうか? SQLDataSourceのように簡単には設定できず、特殊なやり方じゃないとダメなのでしょうか? なにぶんAsp.Netは初心者なので、何卒お願い申し上げます。

  • SQLデータベースの処理

     よろしくお願いします。 今JSPファイルにJAVA文を埋め込む形でデータベースの処理を行おうとしております。 データを10件ずつ表示するページング、 データを昇順、降順で表示するソーティング の機能を元のデータベースに追加したところです。 ただ、今の段階ではこれらを同時(順次)に行うことが出来ません。ソーティング→ページングの順で行うと指定した10件が表示されるのですがソーティングされていませんし、指定もソーティングした状態で上から何件という風になりません。また逆もしかりです。 81件目~90件目を表示した状態でさらにこの10件をソーティングするにはどうすればよいでしょうか??

    • ベストアンサー
    • MySQL
  • Gridviewの並べ替えについて

    SqlDataSourceを設定したGridviewを作成しました。 GridviewのAllowSortingは"true" を設定し、ユーザが並べ替えできる設定にしました。 再表示ボタンをクリックすると、ユーザが行った並べ替えをクリアし、 Gridview読み込み時の初期状態の並び順に戻したいのですが、 ボタンのクリック時にどのように記述すればよろしいですか? GridviewをDataBindしたのですが、ユーザーがクリックした列の並び替えが初期化されません。 ご教授お願いします。

  • AccessVBAでSQL文を書いています

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします。 タイトルの通りSQL文を書いているんですが、書き方が解りません。 sql = "select 顧客コード from ポイント管理テーブル " sql = sql + " where 顧客コード = '" & Me.顧客コード & "'," sql = sql + " 受注年 = '" & Me.受注年 & "'," sql = sql + " 受注月 = " & Me.受注月 & "," sql = sql + " 受注日 = " & Me.受注日 & "" 初歩的な質問なのですが、上記はどのように記述したらよいのでしょう? ちなみに、顧客コードと受注年がテキスト型 受注月と受注日は数値型としてテーブルに持っています。 よろしくおねがいします。

  • VisualStudio2005でのGridView 集計

    VisualStudio2005でGridViewを使って集計表を出そうと思い下記のSQL文を作成しましたが明細で出てしまいます。 どこが間違っているのでしょうか? ---------------------------------------------------------------- </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:meldandyConnectionString %>" SelectCommand="SELECT DISTINCT [kamoku_code], [kamoku_name], [s_code], [s_name], [kingaku] FROM [a_keihi_dt] WHERE ([kamoku_code] > @kamoku_code2) GROUP BY [s_code], [kamoku_code], [kamoku_name], [s_name], [kingaku] ORDER BY [s_code], [kamoku_code]">

  • MysqlのSQL文について

    AccessとMysqlを用いてデータベースシステムを作成しています。 添付図の左の表から,右の表の品番と枝番が一致するデータを削除する場合(今回はaaaの2と6)は,どのようにSQL文を記述すればよいでしょうか? Do Untilで1行毎に比較して削除する方法では時間がかかり過ぎたため,SQL文で一度で処理できないかと考えたのですが,SQL文をどのように記述すればよいかわかりませんでした... お分かりになられる方がいらっしゃいましたら,ご教授宜しくお願い致します。

    • ベストアンサー
    • MySQL

専門家に質問してみよう