我正在尝试创建一个表单。表单控件名称总是相同的。但是控制类型会改变。例如,我有一个名为“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;
}
}
请提供一种方法,我可以做到这一点。