- - PR -
GridViewのテキスト取得 Template使用
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-10 17:42
開発環境:VS2005 C#
Webアプリを作成しています。 C#でGridViewの一部分にTextBoxを TemplateFieldを使って プログラム上から 貼り付けました。。 ボタンが押されたら、TextBox上のデータを取得したいのですが いくつか試したのですがうまく行きませんでした どのように取得すれば良いのでしょうか? どなたかご教授御願いします。 FindControlを使って出来るのかと思ったのですが、 プログラムで、ボタンを追加しているので、 どのような方法で、idを付加すればよいのか 分かりません。。 もしくは、違う方法があるのでしょうか? よろしく御願いいたします。 [ メッセージ編集済み 編集者: ken 編集日時 2006-10-10 17:44 ] | ||||||||
|
投稿日時: 2006-10-10 18:47
> FindControlを使って出来るのかと思ったのですが、
> プログラムで、ボタンを追加しているので、 > どのような方法で、idを付加すればよいのか > 分かりません。。 追加するときにIDの指定ができるのではないかと思いますが。 それから、生成されるHTMLにIDの記述がないでしょうか。 これが毎回同じになっているならそのIDを利用できると思います。 | ||||||||
|
投稿日時: 2006-10-10 19:49
プログラムでボタンを追加というのは、 kenさん がコードで TemplateField に TextBox を追加しているんですよね。 だとしたら、下のように ID を設定できますよね。
| ||||||||
|
投稿日時: 2006-10-11 11:02
どっとねっとふぁんさん、かるあさん
レスありがとうございます。 IDは、設定できたのですが、 FindControlを行っても、nullが入ってしまいます。 TextBoxの貼り付けがおかしいのでしょうか? GridViewに表示されてるのは、確認できています。 テキストモードなど設定は可能でした。 ご教授御願いいたします。 -------------------------------------------------------------------------- ■抜粋 GridViewにテキストボックス貼り付け処理 TemplateField TempF = new TemplateField(); for (i = 0; i < (num - 1); i++) { StrDataField = dataSet_Edit.Tables[0].Columns[i].ToString(); TempF.HeaderText = StrDataField; UserItemTemplate_Text UserTemp = new UserItemTemplate_Text(); UserTemp.ColumnsCount = i; TempF.ItemTemplate = UserTemp; Gvalue.Add(TempF); TempF = new TemplateField(); } -------------------------------------------------------------------------- protected void Button_Edit_Click(object sender, EventArgs e) { Control Txt; Txt = GridView_Edit.Rows[0].FindControl("GridView_Edit_ctl02_TextBoxNo0"); } -------------------------------------------------------------------------- -------------------------------------------------------------------------- public sealed class UserItemTemplate_Text : ITemplate { public bool TextMode; public int ColumnsCount; public UserItemTemplate_Text() { } public void InstantiateIn(Control obj) { TextBox oTextBox = new TextBox(); oTextBox.Width = 70; oTextBox.ID = "TextBoxNo" + ColumnsCount.ToString(); if (TextMode == true) { oTextBox.TextMode = TextBoxMode.Password; } obj.Controls.Add(oTextBox); } } --------------------------------------------------------------------------- | ||||||||
|
投稿日時: 2006-10-11 11:44
FindoControl はサーバー側で認識する ID で検索するので、 この場合は "TextBoxNo0" で検索するといけませんか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2006-10-11 12:05
かるあさん
レスありがとうございます。 GridView_Edit.DataBind(); 後に↓が呼び出されて public void InstantiateIn(Control obj) テキストの設定を行っているようで、 DataBaind後すぐに下記のように >FindoControl はサーバー側で認識する ID で検索するので、 >この場合は "TextBoxNo0" で検索するといけませんか? GridView_Edit.Rows[0].FindControl("TextBoxNo0"); で取得する事が出来たのですが、 ボタンクリック後に同じような事をすると nullになってしまいました・・ ポストバックで初期化されてしまうからでしょうか??・・ ボタンを押されても、データを保持するような事は 出来るのでしょうか?。セッション変数とかで 持ってくるのでしょうか? | ||||||||
|
投稿日時: 2006-10-11 13:36
> ポストバックで初期化されてしまうからでしょうか??・・
ポストバック時にTextBoxの追加処理がまた動いていると自分でデータを 初期化してることになりますが、そこは大丈夫ですか? | ||||||||
|
投稿日時: 2006-10-11 13:40
かるあさん
レスありがとうございます。 GridView_Edit.DataBind(); 後に↓が呼び出されて public void InstantiateIn(Control obj) テキストの設定を行っているようで、 DataBaind後すぐに下記のように >FindoControl はサーバー側で認識する ID で検索するので、 >この場合は "TextBoxNo0" で検索するといけませんか? GridView_Edit.Rows[0].FindControl("TextBoxNo0"); で取得する事が出来たのですが、 ボタンクリック後に同じような事をすると nullになってしまいました・・ ポストバックで初期化されてしまうからでしょうか??・・ ボタンを押されても、データを保持するような事は 出来るのでしょうか?。セッション変数とかで 持ってくるのでしょうか? お判りになる方、ご教授御願いいたします。 -------------------------------------------------------------------------- TemplateField TempF = new TemplateField(); for (i = 0; i < (num - 1); i++) { StrDataField = dataSet_Edit.Tables[0].Columns[i].ToString(); TempF.HeaderText = StrDataField; UserItemTemplate_Text UserTemp = new UserItemTemplate_Text(); UserTemp.ColumnsCount = i; TempF.ItemTemplate = UserTemp; Gvalue.Add(TempF); TempF = new TemplateField(); } GridView_Edit.DataSource = dataSet_Edit; GridView_Edit.DataBind(); ← この処理のあとにUserItemTemplate_Textが呼ばれました。 Control Txt = GridView_Edit.Rows[0].FindControl("TextBoxNo0"); ← ここでは、取得可能でした。 -------------------------------------------------------------------------- protected void Button_Edit_Click(object sender, EventArgs e) 押されたら、テキストの内容を取得したい。 { Control Txt = GridView_Edit.Rows[0].FindControl("TextBoxNo0"); ← ここでは、nullでした。 } -------------------------------------------------------------------------- -------------------------------------------------------------------------- public sealed class UserItemTemplate_Text : ITemplate { public bool TextMode; public int ColumnsCount; public UserItemTemplate_Text() { } public void InstantiateIn(Control obj) { TextBox oTextBox = new TextBox(); oTextBox.Width = 70; oTextBox.ID = "TextBoxNo" + ColumnsCount.ToString(); if (TextMode == true) { oTextBox.TextMode = TextBoxMode.Password; } obj.Controls.Add(oTextBox); } } |
1|2|3
次のページへ»