通过自定义控件动态更改下拉列表和文本框

时间:2012-09-18 08:29:07

标签: c# asp.net textbox custom-controls html-select

我想编写一个涉及DropDownListTextBox的自定义控件。 实际上,我想动态呈现DropDownListTextBox。 例如:当用户点击Checkbox时,Textbox将更改为DropdownList。另一方面,当用户取消选择Checkbox时,Dropdownlist将更改为Textbox

我知道这可以使用两个控件来完成,这两个控件设置两个控件的可见性。但是我可以在自定义控件上执行此操作吗?

2 个答案:

答案 0 :(得分:1)

如果你仍然想采用这种方法,这是你的代码。

在设计文件中: -

 <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);
    }
}

希望这就是你要找的东西。

答案 1 :(得分:0)

你可以试试这段代码

<强> 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;
}

如果检查,则显示dropDownList > > > 未选中。尽管这是可能的我不认为这是正确的方法。(例如:需要AutoPostBack,设置可见性......)

你想要达到什么目的?