電子書籍の厳選無料作品が豊富!

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

-------------------------------------------------------------------

A 回答 (2件)

あのねえ。



貴方、クルマの運転するのに、「キーを回したのに動きません。何で」と言ってるのと同じだよ。
クルマなら順番にガソリンの入れ方、ドアの開け方、ギアの入れ方っちゅうもんがあるんでないの?

カスタマイズしたWhere文を動的にセットするために、GridViewにSQLDataSource繋いで、TableAdapterも理解しないところから始まってるのに、その過程で「自分の質問の意図と違う」とは何ぞ。

ObjctDataSourceってカスタマイズしたSQLの処理に限らず、ページング表示とか、更新・削除・挿入などの双方向処理などを行うための奥深い、複雑なものなんだ。

先に接続先であるDAOのことを完全に理解しないと手が出ないと思ってそういう説明をしてる。
「初心者や」ていうんなら、「ここまではわかった」という過程を明確にして進まんといかんよ。

まあ、色々やってみることやね。
オイラの言ってることは赤間本にも、ネットにも山のように書いてあるし。
    • good
    • 0
この回答へのお礼

shockatz様、大変お世話になっております。

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

その際には初心者にもわかるご回答お待ち申し上げております。
ありがとうございました。

お礼日時:2012/08/27 10:49

何か変だなあ。



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初心者なので、変な質問をしてるでしょうか

補足日時:2012/08/24 08:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!