- PR -

GridViewのテキスト取得 Template使用

投稿者投稿内容
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-11 13:52
どっとねっとふぁんさん
レスありがとう御座います。
引用:

どっとねっとふぁんさんの書き込み (2006-10-11 13:36) より:
> ポストバックで初期化されてしまうからでしょうか??・・

ポストバック時にTextBoxの追加処理がまた動いていると自分でデータを
初期化してることになりますが、そこは大丈夫ですか?




追加処理は、呼ばれていないので
大丈夫かと思います。

ボタンが押された後、GridViewは、FindControlで取得
は、可能だったのですが、TextBoxは取得するとnullでした。。
なくなってる感じです。。ボタンを押すと、テキストボックスは
消えてしまいます。。

原因は、そこら辺かと思うのですが、
ボタンの押されたときにポストバックで、TextBox部分が
破棄されるのでしょうか?・・

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-10-11 14:09
引用:

kenさんの書き込み (2006-10-11 13:52) より:

原因は、そこら辺かと思うのですが、
ボタンの押されたときにポストバックで、TextBox部分が
破棄されるのでしょうか?・・


テンプレートフィールドの追加処理はどのタイミングで実行されているのでしょうか?GridView に動的に追加したカラムはポストバックのたびに作り直す必要があります。
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-11 14:22
かるあさん、
レスありがとう御座います。
詳しく説明いたします。

画面上にAグリッドとBグリッドの二つがあります。
Aグリッドの編集ボタンが押されたら、
選択されたデータによって、
Bグリットにテキストボックスを作成します(動的)。
その作成されたテキストボックスにデータを入力して
ボタンが押されたら、その入力されたデータを取得
したいと思っています。
下記の様にボタンが押されて作り直した場合は、
入力されたテキストデータもなくなってしまうのでは、
ないのでしょうか??

引用:

かるあさんの書き込み (2006-10-11 14:09) より:
テンプレートフィールドの追加処理はどのタイミングで実行されているのでしょうか?GridView に動的に追加したカラムはポストバックのたびに作り直す必要があります。







べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-11 15:19
引用:
下記の様にボタンが押されて作り直した場合は、
入力されたテキストデータもなくなってしまうのでは、
ないのでしょうか??

同じIDのコントロールを作れば大丈夫だった気がします。

引用:
■抜粋 GridViewにテキストボックス貼り付け処理

これ、どこに記述してますか?

ステップ実行でデバッグしてみてください。ポストバック時の
GridView_Edit.Rows[0].FindControl("TextBoxNo0");
↑このコードは
oTextBox.ID = "TextBoxNo" + ColumnsCount.ToString();
↑このコードの後に通っていますか?
ID設定が後だったら、当然FindControlでは見つからないですね(まだデフォルトのIDのままだから)
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-11 15:34
べるさん、
レスありがとうございます。

引用:

ステップ実行でデバッグしてみてください。ポストバック時の
GridView_Edit.Rows[0].FindControl("TextBoxNo0");
↑このコードは
oTextBox.ID = "TextBoxNo" + ColumnsCount.ToString();
↑このコードの後に通っていますか?
ID設定が後だったら、当然FindControlでは見つからないですね(まだデフォルトのIDのままだから)



Aグリットの編集ボタンを押されると
そのイベントの中で、編集画面を作成し
動的にテキストを配置しています(Bグリット)
その処理の中でFindContorlを行った場合は
取得できるのですが、その後に表示された画面で
テキスト部に入力をして、ボタンを押しクリックイベント時に
入力されたテキストを取得したいのですが、
FindControlを行うとnullが入っているのです。。
テキストボックスがなくなってしまっているようなのです。

ボタンを押され、ポストバックが起きて
テキストボックスが破棄されてるみたいです
ポストバック前に、データを取得は、
可能なのでしょうか?
もしくは、ポストバック前に、FindControlを
行うような方法は、あるのでしょうか?

どうしていいか、困っています。。

ご教授よろしく御願いいたします。

[ メッセージ編集済み 編集者: ken 編集日時 2006-10-11 15:39 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-11 16:30
一応代替案として、動的に作成なとせずに、普通に作っておいて表示非表示を切り替える、
とか、POSTパラメータを直接受け取る、などもありますが、

引用:
テキストボックスがなくなってしまっているようなのです。

ボタンを押され、ポストバックが起きて
テキストボックスが破棄されてるみたいです

破棄されたのではなく作成されなかったのです。Aグリットの編集ボタンを押したときと
「テキスト部に入力をして、ボタンを押しクリックイベント時」とではPageインスタンスが
異なりますから。クリックイベント時にはどのタイミングでテキストボックスを生成していますか?
それがFindControlより前で、前と同じIDが振られていればうまくいくと思います。
生成していないのであれば当然、破棄されたようになります。


引用:
ポストバック前に、データを取得は、
可能なのでしょうか?
もしくは、ポストバック前に、FindControlを
行うような方法は、あるのでしょうか?

クライアントからの入力なのですから、入力した後のポスト(即ちポストバック)でない限り
サーバでデータ取得はできないですね。
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-11 18:27
べるさん、
レスありがとうございます。

ボタンを押される前の
HTMLをコードに変換をしてみてました
<input name="GridView_Edit$ctl02$TextBoxNo0" type="text" id="GridView_Edit_ctl02_TextBoxNo0" style="width:70px;" />

POSTをやってみたのですが、
同じようにnullでした。。

■抜粋
else
{
String Test = Request.Form["GridView_Edit_ctl02_TextBoxNo0"];
String Test1 = Request.Form["TextBoxNo0"];
}

もう少し、考えて見ます。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-11 19:02
引用:
ボタンを押される前の
HTMLをコードに変換をしてみてました
<input name="GridView_Edit$ctl02$TextBoxNo0" type="text" id="GridView_Edit_ctl02_TextBoxNo0" style="width:70px;" />

POSTをやってみたのですが、
同じようにnullでした。。

■抜粋
else
{
String Test = Request.Form["GridView_Edit_ctl02_TextBoxNo0"];
String Test1 = Request.Form["TextBoxNo0"];
}

んと、、POSTパラメータはform部品のname属性の方で受け取るんじゃないでしょうか?

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