- PR -

GridViewのテキスト取得 Template使用

投稿者投稿内容
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-10 17:42
開発環境:VS2005 C#
Webアプリを作成しています。

C#でGridViewの一部分にTextBoxを
TemplateFieldを使って
プログラム上から
貼り付けました。。
ボタンが押されたら、TextBox上のデータを取得したいのですが
いくつか試したのですがうまく行きませんでした
どのように取得すれば良いのでしょうか?
どなたかご教授御願いします。

FindControlを使って出来るのかと思ったのですが、
プログラムで、ボタンを追加しているので、
どのような方法で、idを付加すればよいのか
分かりません。。

もしくは、違う方法があるのでしょうか?

よろしく御願いいたします。

[ メッセージ編集済み 編集者: ken 編集日時 2006-10-10 17:44 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-10 18:47
> FindControlを使って出来るのかと思ったのですが、
> プログラムで、ボタンを追加しているので、
> どのような方法で、idを付加すればよいのか
> 分かりません。。

追加するときにIDの指定ができるのではないかと思いますが。
それから、生成されるHTMLにIDの記述がないでしょうか。
これが毎回同じになっているならそのIDを利用できると思います。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-10-10 19:49
引用:

kenさんの書き込み (2006-10-10 17:42) より:

FindControlを使って出来るのかと思ったのですが、
プログラムで、ボタンを追加しているので、
どのような方法で、idを付加すればよいのか
分かりません。。


プログラムでボタンを追加というのは、
kenさん がコードで TemplateField に TextBox を追加しているんですよね。
だとしたら、下のように ID を設定できますよね。
コード:
  TextBox txt = new TextBox();
  txt.ID = "txt";

ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 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);
}
}
---------------------------------------------------------------------------
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-10-11 11:44
引用:

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

コード:
protected void Button_Edit_Click(object sender, EventArgs e)
{
	Control Txt;
        Txt = GridView_Edit.Rows[0].FindControl("GridView_Edit_ctl02_TextBoxNo0");
}




FindoControl はサーバー側で認識する ID で検索するので、
この場合は "TextBoxNo0" で検索するといけませんか?
_________________
かるあ のメモスニペット
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-10-11 12:05
かるあさん
レスありがとうございます。

GridView_Edit.DataBind();
後に↓が呼び出されて
public void InstantiateIn(Control obj)
テキストの設定を行っているようで、
DataBaind後すぐに下記のように

>FindoControl はサーバー側で認識する ID で検索するので、
>この場合は "TextBoxNo0" で検索するといけませんか?

GridView_Edit.Rows[0].FindControl("TextBoxNo0");
で取得する事が出来たのですが、
ボタンクリック後に同じような事をすると
nullになってしまいました・・

ポストバックで初期化されてしまうからでしょうか??・・

ボタンを押されても、データを保持するような事は
出来るのでしょうか?。セッション変数とかで
持ってくるのでしょうか?

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-11 13:36
> ポストバックで初期化されてしまうからでしょうか??・・

ポストバック時にTextBoxの追加処理がまた動いていると自分でデータを
初期化してることになりますが、そこは大丈夫ですか?
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 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);
}
}

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