- PR -

[VS2005 ASP.NET C♯]GridViewの動的作成テンプレートのポストバック時の値取得について

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-16 14:06
引用:
Template作成の記述はGridViewにBindする前にしています。

ご提示のクラスがテンプレートなのはわかりましたが「Template作成の記述」のコードがわかりません。
「GridViewにBindする前」とは具体的にどのコントロールの何のイベントハンドラですか?
ようするに、ポストバック時もこれが行われているかと、そのタイミング云々が知りたかったんですが↓
引用:
そして、PostBack時にはTemplateFieldの追加を行っていません。

初期表示時とポストバック時のPageインスタンスは別物ですからこれだと当然コントロールは
取得できないでしょうね。POSTパラメータから直接とるとかなら可能ですが。

#テンプレートを追加した時にコントロールができるわけではないようなのでそこもまた
#ネックになってきそうだなぁ
のぉりぃ
会議室デビュー日: 2007/02/15
投稿数: 14
投稿日時: 2007-02-16 14:23
>べるさん
返答ありがとうございます。
Templeate作成の記述はPage_Loadで以下のようにやっています。

TemplateField tFieldTest = new TemplateField();
tFieldTest.ItemTemplate = new GridViewTemplate();
gridViewTest.Columns.Add(tFieldTest);

ただ、実際の行の中のコントロールの追加はDataBind時に行っているので難しいです。
Bindなしでコントロールを配置できれば問題ないんでしょうが。。。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-02-16 15:06
引用:

ただ、実際の行の中のコントロールの追加はDataBind時に行っているので難しいです。
Bindなしでコントロールを配置できれば問題ないんでしょうが。。。


難しく考えなくていいです。
その DataBinding イベントはいつ呼ばれるのでしょうか?
_________________
囚人のジレンマな日々
のぉりぃ
会議室デビュー日: 2007/02/15
投稿数: 14
投稿日時: 2007-02-16 15:18
>囚人さん
度々、返答していただいてありがとうございます。
DataBindingイベントのほうですが、GridViewのほうでOnRowDataBoundのイベント
処理をしていますので、その後に実行されます。OnRowDataBoundイベントではBoundされたデータの有無によってセルの色を変えているだけです。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-02-16 15:26
それで、RowDataBoundイベントはいつ呼ばれるのでしょうか?
要は、そういったデータの設定だとかコントロールの作成だとかが Page_Load の終わりまでに終わっていれば良いだけだと思うのですが。
_________________
囚人のジレンマな日々
のぉりぃ
会議室デビュー日: 2007/02/15
投稿数: 14
投稿日時: 2007-02-16 18:48
>囚人さん
返答ありがとうございます。
RowDataBoundイベントはBindを行ったときに1行バインドするごとに発生します。
今の作りですと、バインドを行わなとテキストボックス(コントロール)が作成されない状況です。
そこで、PostBack時にもデータバインドをしてテンプレートフィールドを作成したのですが、その場合はDBから取得したデータが入ってしまいます。
やはり、今の状況ですとDataBinderのイベント時にテンプレートフィールドを作成するのではなく、バインドとは切り離してテンプレートフィールドを作成する必要があると思います。
いつも言葉足らずですみません。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-02-16 20:10
遠まわしに言っているつもりはないのですが、なかなか伝わらないようですね。すみません。

引用:

RowDataBoundイベントはBindを行ったときに1行バインドするごとに発生します。


それは分かっていますが、一体どこでそれを「発生させているか」が大事です。
引用:

今の作りですと、バインドを行わなとテキストボックス(コントロール)が作成されない状況です。
そこで、PostBack時にもデータバインドをしてテンプレートフィールドを作成したのですが、その場合はDBから取得したデータが入ってしまいます。


もう一度言いますが、Page_Load が終わるまでに、データバインド、データコントロールの作成を行ってください。例えば、データソースの設定を Page_Load 内で行えば、RowDataBound が発生し、それは OK となります。

「今の作り〜」の詳しい状況は分かりませんが、とにかく Page_Load までにそれを終わらせれば、その「後」に Post データを取得できます。
「その場合はDBから取得したデータが入ってしまいます。 」はどのタイミングで参照している事を言っていますか?
_________________
囚人のジレンマな日々
のぉりぃ
会議室デビュー日: 2007/02/15
投稿数: 14
投稿日時: 2007-02-16 21:58
>囚人さん
返答ありがとうございます。
そして、説明足らずですみません。

データバインド、テンプレート作成はPage_Load内で全て行っています。
これは、PostBack時も同じです。
DBからの取得データが入っているというのは、Page_Loadスタート→TemplateFiled作成→GridViewのDataBind→Control追加→Bind終了→BottunClickイベント発生→GridViewのデータ取得→DBのデータが入っているという状況です。
この場合ですと、RequestFormでデータを再セットすればなんとかうまく動くと思います。
他に何か方法とかあるのでしょうか?
また説明が不足してたらすみません。

スキルアップ/キャリアアップ(JOB@IT)