- - PR -
DataSetをグローバルで値を保持したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-01-29 17:06
初めて投稿させて頂きます。
ASP.Net(Ver.2003)でのはじめての開発で現在つまずいている所があります。 伝票の登録画面を作っていて、 画面構成は上部から 明細ヘッダ情報入力項目 (InputBox等) 1明細単位の入力項目 (InputBox等) 明細一覧 (DataGrid) という構成になっています。 明細の編集は一覧から明細を指定し、 1明細単位の入力項目で編集、削除を行い 一覧に落とし込むような作りにしたいと思っています。 現在詰まっているところはDataSetを ページ内はグローバルで保持していたいのですが 取得している関数を抜けると初期化されてしまいます。 何か原因もしくはもっと良いやり方があるのならば お教え頂きたいと思ってます。 よろしくお願いします。 |
|
投稿日時: 2004-01-29 17:22
ここを見てみてください。
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet15/aspnet15_01.html データはサーバー側かクライアント側どちらかに保存しておかなければなりません。 そのDataSetの値は、現在のプログラムではどこに保存されていますか?あるいは保存されていませんか? っと、関数を抜けると、ということはそれ以前のスコープの問題かな・・・? |
|
投稿日時: 2004-01-29 17:27
あ〜、これだ。簡単になるのはいいかもしれないけれど、基本的なことを知らなくても作れてしまうっちゅうのが、VS.NETの難点だ。
失礼。 まず、Webアプリケーション(ASP.NET)が、どのような技術でもって、どのような技術の上に成り立っているか、調べてください。 端折って説明すると、ASP.NETは「サーバサイド」と「クライアントサイド」、2つの「アプリケーション」で構成されます。サーバサイドはアプリケーションの「実務」を担当し、クライアントサイドはユーザインタフェースを担当します。 ここで、ASP.NETはHTTPという通信手順によって、サーバとクライアントが情報交換をしますが、この手順は「ちょうだい」「ハイよ」しかありません(取りこぼしの再要求などもありますけどね)。クライアントの要求に応えたら、サーバのプログラムは終了します(本当は違うけど、これくらい過激に覚えておく方がベター)。「取得している関数を抜けると初期化される」のではなく、「プログラムが終了するから初期化されている」のです。これは、絶対に覚えておいてください。 なぜ初期化されるかは、これでお解りいただけたとして、「値を残す」方法は、あります。「セッション」とか、「ビューステート」、「キャッシュ」、「ポストバック」という言葉をキーに、MSDNを検索し、読みあさってください。遠回りなようですが、開発チームに一人はある程度の知識がある人がいないと、この先破綻します。 |
|
投稿日時: 2004-01-29 17:31
早速の返信ありがとうございます。
aspx.vb内で指定しているので どうもサーバーサイドもPGに入ると変数指定を 繰り返していて初期化されてしまっているみたいです。 今度はセッションに保持しておこうかと考えているのですが… Public Property _SDATASET() As String Get SDATASET= _SDATASET End Get Set(ByVal UDATASET As DataSet) _SDATASET= Value Session.Contents("SDATASET") = _SDATASET End Set End Property と設定すると"Set(ByVal UDATASET As DataSet)"のUDATASETは同一の型で無いと 指定できませんとエラーが出てしまいます。 他に指定の方法があるのですか? |
|
投稿日時: 2004-01-29 17:40
Jittaさん返信ありがとうございます。
確かにおっしゃられる通りです… ASP.NetどころかWebの画面周りを一切開発したことの無い 僕が開発するのはいささか無理がありますよね… HTMLですら今月中位から初めて覚え始めましたし… そういうアサインをちゃんと考えてアサインしてくれる会社なら 良いんですがなにせ人員が… がんばって成長していきたいと思ってるので 大きな心で見守って頂けると幸いです。 |
|
投稿日時: 2004-01-29 17:51
>サーバーサイドもPGに入ると変数指定を繰り返していて初期化されてしまっている
というのは、サーバー側で毎回新しいDataSetオブジェクトをnewしているということですか? いずれにしても、あっくんさんの書かれたPropertyのソースは文法的に間違っています。 Public Property _SDATASET() As String とString型だと書いたのなら、 Set(ByVal UDATASET As DataSet) これもString型でないといけません。 これはASP.NETではなく、VB.NETの文法の問題です。 ASP.NETどころか、.NET開発そのものがはじめてですね、おそらく。(ソースからは、以前のVBはやっていたことがあるように見える) 同じ開発に関わっているメンバーには聞くことはできませんか? 聞いていないだけなら良いんですが、もし聞いても判らなかったというなら、そのプロジェクトは非常に危険な状態にあると思って良いと思います。 DEATH MA!! な未来が待っていますので、寝袋とユンケルを準備しておいてください。 |
1