• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ASP.Net ObjectDataSource4)

ASP.Net初心者がグリッドビューのデータソースに動的Where句を使用したい

このQ&Aのポイント
  • ASP.Net初心者が、グリッドビューのデータソースに動的Where句を使用する方法がわかりません。
  • ボタンクリックイベントのプログラムで、SQL文を作成し、TableAdapterのメソッドを実行することで、グリッドビューのデータを更新したいです。
  • まだ理解が足りないため、初心者なので、助言をお願いできればと思います。

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

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

とりあえずObjectDataSource抜きで接続はできたの? そもそも、 Public Function GetMstTokDataSet2(ByVal SQL As String) As DataTable ぢゃ駄目だよ。 正しくTableAdapterが作られていれば、ここは、 Public Function GetMstTokDataSet2(ByVal SQL As String) As t_MstTokDataTable になるはず。DAO側の戻り値は「強い型付き」でないと。ObjectDataSourceはデータソースのプロパティでハンドリングを行うから、「型なし」のDataTableではうまくない。 ページング表示や、一覧形式での更新をしなくていいのなら、こんな感じで「強い型付き」のDataTableを撮ってきて、直接ビューコントロールのDataSourceに入れてやればいい。ObjectDataSourceは不要です。 //== ObjectDataSourceへのパラメタ渡しについては(ObjectDataSourceをどうやって作っているかそもそも??なのだが)、ObjectDataSource側にSelectParametersって属性を設定できるでしょ? ウィザードで設定すると、こういうタグができているはず。 <SelectParameters> <asp:ControlParameter ControlID="EmployeesDropDownList" PropertyName="SelectedValue" Name="EmpID" Type="Int32" DefaultValue="0" /> </SelectParameters> 見たとおりだわ。この例だと、ObjectDataSourceは、"EmployeesDropDownList"の"SelectedValue"を見てて、それを"EmpID"という引数に埋めてDAOを呼び出す。型はInt32で、デフォルト値は0。 だから、なんとかボタンのClickイベントでは、 グリッドビュー.DataBind() だけで済んでしまうのですよ。 DataBind()の瞬間に、グリッドビューのDataSOurceIDに指定されているObjectDataSourceが呼ばれ、ObjectDataSourceは勝手に"EmployeesDropDownList"の"SelectedValue"を呼びにいって、その値引数"EmpID"というプロパティでDAOを呼び出し、取得したなんちゃらDataTableをグリッドビューに返し、グリッドビューがそれを表示する。 ObjectDataSourceを使うと、「全部宣言で用意しておいて」、取得も更新も削除も自動的に行うわけ。 SqlDataSourceと同じことだわ。 //== あとついでに蛇足 何かグリッドビューの表示時に、いろいろ表示をTweakしたいみたいだけど、それをやるならグリッドビューはNGだよ。 一覧表示のGridView、個別表示のDetailsViewというのが、よくセットで使われる第2世代のデータビューコントロールだけど、そもそも表示をカスタマイズしたり、生成されるタグを完全制御できない。 勝手にテーブルになるし、グリッドの形式も制御不能。 要するにGridView/DetailsViewてのは、「第二世代お手軽データビューコントロール」っす。 まあ、簡単な表示ができるようになったら、とっととListViewに鞍替えしたほうがいいよ。 ついでに、詳細画面を作る際もFormViewを使うべし。

kyokotan12
質問者

お礼

shockatz様、大変お世話になっております。 最新の質問までいろいろとご指導ありがとうございます。 ObjectDataSource とDBの接続方法、動的SQL文の設定、 そのほか、いろいろな接続、変更などの方法の仕方が未熟ゆえ わからない次第でございます。 まだグリッドビューの動的SQLの変更方法など、まだわたくしには早かったかなと質問の回答を見させていただき思って次第でございます。 まずは ご紹介いただいた、赤間本を読破、熟読し、グリッドビュー、リストビューの選定など、改めてご質問させて下さいませ。 その際には初心者にもわかるご回答お待ち申し上げております。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#259269
noname#259269
回答No.1

過去の質問を拝見しましたが、基礎知識をもう少し仕入れるべきです。 でないと何時までも質問しないと前に進めませんよ。 まずは、クラス・インスタンスについて学習しましょう。 クラスメソッドは、 クラス名.メソッド名 で呼び出します。インスタンスメソッドは、 オブジェクトを作って オブジェクト名.メソッド名 で呼び出します。 今回は敢えて ObjectDataSource には突っ込まずに GetMstTokDataSet2 を呼び出す事だけを回答してみます。 Dim sql As String = "SELECT ~" Dim t As New MstTokDataSetTableAdapters.t_MstTokDataSetTableAdapters() Dim dt As MstTokDataSet.t_MstTokDataTable = t.GetMstTokDataSet2(sql)

kyokotan12
質問者

補足

edp3142さん 大変お世話になります。 クラス、インスタンスについての勉強しっかりとやろうと思います。 ご指摘ありがとうございます。 Dim TN As New MstTokDataSetTableAdapters.t_MstTokTableAdapter() Dim dt As MstTokDataSet.t_MstTokDataTable = TN.GetMstTokDataSet2(SQL) これで GetMstTokDataSet2  が呼び出されることしっかり勉強させていただきました。この事を忘れずに精進したいと思っております。 ですが、グリッドビューのソースは変わりません。 グリッドビューのソースはこれだけではデータが反映されないのですね。 ここからObjectDataSourceを操作しデータを反映させる感じになるのでしょうか? 差支えがなければ、この記述の後にどう書けばグリッドビューが更新されるのか、お教えいただけますと大変助かるのですが・・・ 何卒よろしくお願い申し上げます。

すると、全ての回答が全文表示されます。

関連するQ&A