- - PR -
WebフォームとDataSet
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-09 15:59
WebフォームでDataSetを使うときの素朴な疑問があるのですが、
書籍等を読んでもなかなか解決しませんので教えてください。 Q1:DataSetは抽出したデータをクライアントにデータをため込むのでしょうか? それともサーバー側にデータをため込むのでしょうか? Q2:DataGridでDataSetを使い、1ページに5件までの表示とした場合、 データが10件ある時、1画面の表示でクライアントに読み込まれ るのは5件分だけなのでしょうか? それとも10件分読み込んでページが切り替わるときにすべて引き 継いでいるのでしょうか? Q3:サーバー側でため込んでいるとすると、ユーザーがアプリケーションの 終了処理をせずにブラウザを閉じたりしたような場合、ため込んだデータ はいつ解放されるのでしょうか? | ||||
|
投稿日時: 2004-04-09 16:27
Q1. .NETのプログラムはサーバー上で動いています。ですのでDataSetのインスタンスもサーバー側のメモリ上にあります。
Q2. ページが切り替わる時にDataBind()していますよね。(あれ・・・してないんだっけ?) DataGridはDataBind()が実行された時に、DataSourceのオブジェクトと現在何ページ目を表示することになっているか等によって、自分自身が出力するべきHTMLを生成します。 クライアントに渡されるデータは5件分だと思います。 Q3. どのようにため込んでいるのかによります。 例えば、データベースから取得したデータの入ったDataSetをセッションに格納しているのならセッションが切れる時です(デフォルトで20分後かな) メモリ上に置いていただけなら、サーバー側での仕事が終わってちょっとしたら勝手になくなると思います。 | ||||
|
投稿日時: 2004-04-09 17:03
あれ?
ASP.net って、VIEWSTATEの形でクライアント側に貯め込むんじゃなかったでしたっけ? 記憶違いだったら、ごめんなさい | ||||
|
投稿日時: 2004-04-09 17:10
クライアント側に取っておいてもらうこともできますよ。DataSetをVIEWSTATEに入れれば。 DataGridはDataSourceに設定されているオブジェクトもVIEWSTATEに取っておいてくれるんでしたっけ? | ||||
|
投稿日時: 2004-04-09 17:31
こんにちは。 自動ではやってくれませんので、DataSetをPageのViewStateに保存するコーディングが必要です。 しかしViewStateに放りこむと、通信量がすごく増えるので注意しないと使い物にならないですよね、特にナローバンド環境では。データ件数にもよりますが。 | ||||
|
投稿日時: 2004-04-09 17:45
DataSetの内容は、サーバにもクライアントにも保持しません。
クライアントからの要求を受け取って、レスポンスを返すライフサイクルの中で DataSetは消滅します。 DataBindしたときに、クライアント側には、DataGrid上の子コントロールの 値として、VIEWSTATEに保持されますが、それは表示されるテーブル分だけです。 しかも、DataSetとして保持されるわけではありません。 (あくまでも子コントロールの値です。) 従って、POSTBACK時に「選択」のイベントでは、ページが変わらないため、 既存のDataGrid内の子コントロールが保持している値を元に表示を再生させることが できますが、ページを変更して、データの内容が切り替わる場合は、 改めてDataSetをセットしないといけないと思います。 一郎さんがおっしゃるように、意図的にVIEWSTATEにDataSetを入れれば、 クライアント側に引き渡すことも可能です。(大抵すごくおおきなVIEWSTATEに なってしまうと思いますが・・・。) | ||||
|
投稿日時: 2004-04-09 17:58
皆様、ご返答ありがとうございます。
もともと、Webフォームの時、DataSetを使うかDataReaderを使うかでどちらを 使ったらよいのかがよくわからなかったのですが、 いのつち様の回答からすると、どちらでも同じということでしょうか? | ||||
|
投稿日時: 2004-04-09 18:32
DataSetを使うかDataReaderを使うかは
ページングを自分で処理をするか、DataGridに任せるかの違いにあります。 DataSetを使えば、自動でページ処理ができます。 データセットの全件数から、1ページ表示分を割り出して該当ページの 内容だけを表示させることが楽にできます。 但し、一度全項目のデータをDataSetにセットする必要があるので、メモリと 処理時間のコストがかかります。 DataReaderを使えば、高速に処理できます。 但し、ページング処理は自分で実装しなければなりません。 該当ページの必要な位置からのデータを抽出する必要があります。 一意のキーのないデータとか、ソーティングなどを考慮すると、 特定のデータ位置をつかみにくい場合は、DataSetに頼ったほうが楽です。 クエリで楽に特定位置から開始できるのであれば、DataReaderでページングを 実装するほうがいいと思います。 |
1