フォームを作成しようとしています。フォーム コントロールの名前は常に同じになります。ただし、コントロールの種類は変更されます。たとえば、「first_name」という名前のコントロールがあります。ページが初期化されると、コントロールのタイプ (TextBox、DropDownList、または CheckBox) を示すデータがデータベースから取得されます。次に、フォームがページ上に動的に作成されます。ビューステートを維持するために、OnInit メソッドでコントロールを作成しました。
protected override void OnInit(EventArgs e)
{
Control first_name;
string ControlType = GridView1.Rows[0].Cells[1].Text;
switch (ControlType)
{
case("TextBox"):
first_name = new Control() as TextBox; first_name.ID = "first_name"; this.Controls.Add(first_name);
break;
case("DropDownList"):
first_name = new Control() as DropDownList; first_name.ID = "first_name"; this.Controls.Add(first_name);
break;
case("CheckBox"):
first_name = new Control() as CheckBox; first_name.ID = "first_name"; this.Controls.Add("first_name");
break;
}
}
次に、コントロールをページにレンダリングします。
protected override void Render(HtmlTextWriter writer)
{
writer.Write("first_name: ");
first_name.RenderControl(writer);
}
次に、コントロールに値を割り当ててみます。ここで問題が発生します。グローバルに宣言されると、コントロールとして宣言され、それらの値を保持することがわかっています。
関数内からグローバルに宣言する方法、またはグローバルに宣言された後にコントロールのタイプを変更する方法はありますか?
protected void Page_Load(object sender, EventArgs e)
{
switch (first_name.GetType().ToString())
{
case ("TextBox"):
first_name.Text = "Your First Name...";
break;
case ("DropDownList"):
first_name.Items.Add("Jason");
first_name.Items.Add("Kelly");
first_name.Items.Add("Keira");
first_name.Items.Add("Sandi");
first_name.Items.Add("Gary");
break;
case ("CheckBox"):
first_name.Checked = true;
break;
}
}
これを達成できる方法を教えてください。