![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ASP.Net ObjectDataSource2
お世話になります。
ASP.Net 初心者です。日夜修行をしているのですが、難解な壁に当たっております。
DataObjectSource に下記のメソッドを追加しました。
グリッドビューを配置してあるWebフォームがあり、
そこにあるDataObjectSourceのSELECTのメソッドを下記のモノに変更しました。
フォームにボタンを追加し、このボタンを押すと、下記が実行されグリッドビューの内容が変更されるようにしたいのですが、どうしても下記のメソッドを呼び出せないのです。
そのまま Call GetMstTokDataSet2(SQL) と呼び出しても
'GetMstTokDataSet2' は宣言されていません。アクセスできない保護レベルになっています。
と表示されてしまいます。
TableAdapter や、DataTable、Class などを初めに記述して、IntelliSense にてその次の候補に関数名が出るわけでもなく、ボタンの Protected Sub Button1_Click から下記のメソッドをどう呼び出してよいのかがわかりません。
本当に基本的な事だと思うのですが、本当にわからないのです。
何卒よろしくお願いいたします。
(App_Code¥MstTok_ODS.vb に記述してあります)
(MstTokDataSet.xsd)
-------------------------------------------------------------------
Namespace MstTokDataSetTableAdapters
Partial Public Class t_MstTokTableAdapter
’問題のメソッド
<DataObjectMethod(DataObjectMethodType.Select, False)> _
Public Function GetMstTokDataSet2(ByVal SQL As String) As DataSet
プログラムが記述してあります。
End Function
End Class
End Namespace
-------------------------------------------------------------------
No.2ベストアンサー
- 回答日時:
あのねえ。
貴方、クルマの運転するのに、「キーを回したのに動きません。何で」と言ってるのと同じだよ。
クルマなら順番にガソリンの入れ方、ドアの開け方、ギアの入れ方っちゅうもんがあるんでないの?
カスタマイズしたWhere文を動的にセットするために、GridViewにSQLDataSource繋いで、TableAdapterも理解しないところから始まってるのに、その過程で「自分の質問の意図と違う」とは何ぞ。
ObjctDataSourceってカスタマイズしたSQLの処理に限らず、ページング表示とか、更新・削除・挿入などの双方向処理などを行うための奥深い、複雑なものなんだ。
先に接続先であるDAOのことを完全に理解しないと手が出ないと思ってそういう説明をしてる。
「初心者や」ていうんなら、「ここまではわかった」という過程を明確にして進まんといかんよ。
まあ、色々やってみることやね。
オイラの言ってることは赤間本にも、ネットにも山のように書いてあるし。
shockatz様、大変お世話になっております。
最新の質問までいろいろとご指導ありがとうございます。
ObjectDataSource とDBの接続方法、動的SQL文の設定、
そのほか、いろいろな接続、変更などの方法の仕方が未熟ゆえ
わからない次第でございます。
まだグリッドビューの動的SQLの変更方法など、まだわたくしには早かったかなと質問の回答を見させていただき思って次第でございます。
まずは ご紹介いただいた、赤間本を読破、熟読し、グリッドビュー、リストビューの選定など、改めてご質問させて下さいませ。
その際には初心者にもわかるご回答お待ち申し上げております。
ありがとうございました。
No.1
- 回答日時:
何か変だなあ。
。Protected Sub Button1_Click
というボタンが何をするものかよくわからないのですが、単にGridViewとObjectDataSourceを連結するだけなら、
me.theGridViewXXXXControl.DataBind()
だけですよ?
で、以降はGridViewのPagingコントローラが、勝手にObjectDataSourceを呼び出して、自らの表示を行い、クリックされればObjectDataSourceを呼び出してページング表示を行います。
何度も繰り返しますが、ObjectDataSourceって、データソース(この場合はTableAdapter)と、コントロール(GridView)を媒介するだけです。
早い話、プロパティ設定パネルでSELECT/DELETE/UPDATE/StartIndexなどの属性に対応するTableAdapterのメソッドやプロパティを設定してするだけです。
GridViewのDataSource(DataSourceIDではなく)に、TableAdapterの戻り値を突っ込み、DataBind()してもデータは表示されます。
それなら何でこんなもんを使うかというと、ページング表示やデータ更新。削除において、表示コントロールとデータアクセス側(TableAdapterやDataAdapter)を仮想化して繋ぎたいからなのです。
DAO(データアクセスオブジェクト)は、DB以外にも各種のストリーム、XML、RSSなど色々あるので、こいつ(ObjectDataSource)がはまっていると、泥臭い物理取得を切り離せるので、都合がいいのです。
//==
とにかく、TableAdapterとObjectDataSourceと、GridViewの話がごっちゃになっています。
この3つを分けて順にマスターしていきましょう。
//==
DataSet1というデータセットを作成し、中にAccessesというデータテーブルと、AccessesTaというテーブルアダプタを作ったときの例文。C#ですいません。適宜VBに読み替えてください。
namespace TableAdapterSample.DataSet1TableAdapters
{
public partial class AccessesTa // クラス拡張宣言
{
// データハンドリング属性はべつになくてもいいので省略
public DataSet1.AccessesDataTable GetData_bySQL(string sqlWhere) {
this.Adapter.SelectCommand = this.CommandCollection[0]; // テーブルアダプタ[0]番目のSELECTを取得
this.Adapter.SelectCommand.CommandText += " " + sqlWhere; // 後ろにWHERE文を追加
var dt = new DataSet1.AccessesDataTable(); // 入れ物(型づきデータテーブル)を準備
this.Adapter.Fill(dt); // 充填
return dt;
}
} // of class
} // of namespace
this.Adapterてのは、TableAdapterが内包しているDataAdapterのことですわ。
この回答への補足
shockatzさん お世話になります。
グリッドビューのデータの変更をするときのタイミングとして
ボタンコントロールがあり、ボタンが押された時に処理を行い、メソッドを実行したいというのが質問なのです。
shockatzさんのご説明だと、条件となるコントロールが変更される度にグリッドビューが変更されていく感じなのでしょうか?
引数の作成もボタンコントロールで行いたいのですが・・・
私が根本から勘違いしてますでしょうか?
複雑な動的Where句 であるSQL文を自身で作成し、DataTableのデータソースにしたい、そのトリガーをボタンにしたいという感じなのですが・・・
何か考え方が間違ってますでしょうか?
なにぶんAsp.Net初心者なので、変な質問をしてるでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
onClickで関数呼出し後に、結果...
-
DataGridViewの行追加について。
-
Javaのクラスのstaticメソッド...
-
【sendkeysメソッドが動かずに...
-
リストボックスの項目削除
-
execute()
-
Excel VBA でExcelを終了したい...
-
eclipse-Tomcatでのデバッグに...
-
エクリプス アウトラインビュ...
-
JAVA言語,JSPによるクイズシス...
-
メソッドをstaticにする、しな...
-
JSPで<SELECT>の中にDBから持っ...
-
エクセルのマクロでプリンタを...
-
サーブレット DBにある生年月...
-
Range クラスのAutoFitプロパテ...
-
Java 可変長引数と優先度
-
新規契約でUQモバイル申し込も...
-
private static という変数の修飾
-
JavaでのDirectXの使用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
Labelコントロールに数字を代入...
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
VBPをダブルクリックするとたま...
-
onClickで関数呼出し後に、結果...
-
コマンドプロンプト実行後に画...
-
配列のメソッド
-
日本の教育って時間が無い中で...
-
Refreshメソッドの使い方
-
mainメソッドのthrows節で設定...
-
【sendkeysメソッドが動かずに...
-
C# 演算 最大値 最小値 表現の仕方
-
VBA コピーが出来ません…!
-
Application.Wait の参照設定
-
ウィンドウを最前面にできません
-
for文(拡張)内の変数(ローカ...
おすすめ情報