DropDownList
我想编写一个涉及 a和 a的自定义控件TextBox
。实际上,我想动态渲染DropDownList
和 TextBox
. 例如:当用户点击 aCheckbox
时,Textbox
将变为 a DropdownList
。另一方面,当用户取消选择 时Checkbox
,Dropdownlist
将变为Textbox
。
我知道这可以使用两个控件来完成,这两个控件都设置了可见性。但是我可以在自定义控件上做到这一点吗?
DropDownList
我想编写一个涉及 a和 a的自定义控件TextBox
。实际上,我想动态渲染DropDownList
和 TextBox
. 例如:当用户点击 aCheckbox
时,Textbox
将变为 a DropdownList
。另一方面,当用户取消选择 时Checkbox
,Dropdownlist
将变为Textbox
。
我知道这可以使用两个控件来完成,这两个控件都设置了可见性。但是我可以在自定义控件上做到这一点吗?
如果您仍想采用这种方法,这是您的代码。
在设计文件中:-
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True"
oncheckedchanged="CheckBox1_CheckedChanged" />
<div id ="control" runat="server">
</div>
在文件后面的代码中: -
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
TextBox txt = new TextBox();
txt.ID = "txt";
control.Controls.Add(txt);
}
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
if (CheckBox1.Checked)
{
for (int ix = this.Controls.Count - 1; ix >= 0; ix--)
if (this.Controls[ix] is TextBox) this.Controls[ix].Dispose();
DropDownList ddl = new DropDownList();
ddl.ID = "ddl";
control.Controls.Add(ddl);
}
else
{
for (int ix = this.Controls.Count - 1; ix >= 0; ix--)
if (this.Controls[ix] is DropDownList) this.Controls[ix].Dispose();
TextBox txt = new TextBox();
txt.ID = "txt";
control.Controls.Add(txt);
}
}
希望这就是你要找的。
你可以试试这段代码
ASPX
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dynamicControl.ascx.cs" Inherits="dynamicControl" %>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"
oncheckedchanged="CheckBox1_CheckedChanged" />
<asp:DropDownList ID="DropDownList1" runat="server" visible="false">
</asp:DropDownList>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
代码隐藏
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
DropDownList1.Visible = CheckBox1.Checked;
TextBox1.Visible = !CheckBox1.Checked;
}
如果CheckBox 被选中,则此代码段将显示一个 dropDownList ,如果未选中则更改为TextBox。尽管这是可能的,但我认为这不是正确的方法。(例如:需要 AutoPostBack,设置可见性...)
你想达到什么目标?