|
■No78682 (とし さん) に返信
> コード名称を取得したのでここで2個目のBOXに名称をセットしたいと思っています。
1個目のテキストボックス (サーバー側で言うと TextBox コントロール)の AutoPoskBack
プロパティは True に設定されていてユーザー入力完了で自動的にポストバックがかかり、
Insertコード_TextChanged ハンドラに制御が飛ぶということで良いのですね。
で、問題は Insertコード_TextChanged ハンドラで2個目の TextBox オブジェクトへの参照
が取得できないということですよね?
であれば、参考にされている記事の「◆◆◆ 追記 その2 ◆◆◆」に書いてある再帰を使っ
て2個目の TextBox オブジェクトへの参照を取得できると思います。
また、1個目の TextBox.Text プロパティの値は Insertコード_TextChanged ハンドラの引数
sender(即ち1個目の TextBox)から取得するのが良いと思います。
以下のような感じです。(コードは C# ですが、分かりますよね?)
protected void Insertコード_TextChanged(object sender, EventArgs e)
{
// TextBox2 は2個目の TextBox の ID
Control ctrl = FindControlRecursive(GridView1, "TextBox2");
if (ctrl is TextBox)
{
string Code = ((TextBox)sender).Text;
KoumokuClass KoumokuObj = new KoumokuClass();
string KoumokuName = KoumokuObj.GetKoumokuName(Labo, Code);
((TextBox)ctrl).Text = KoumokuName;
}
}
protected Control FindControlRecursive(Control Root, string Id)
{
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}
> ListViewで1個目のコードの取得方法と2個目に名称をセットする方法があればチャレンジ
> したいと思います。
ListView を使えば、SqlDataSource の InsertParameters(InsertCommand プロパティで使用
されるパラメータを格納するパラメータ コレクション)の内容を、ユーザー入力の TextBox
をバインド先に設定した ControlParameter に書き換えるというようなウラワザ的なことはし
なくて済むという大きなメリットがあります。
ただし、それと今回の話(1個目の TextBox のユーザー入力をベースにサーバー側で2個目の
TextBox への入力を取得して設定する)は別の問題で、今回の話を実現するには ListView を
使っても上記と同様なことが必要になります。
|