0

DropDownList我想编写一个涉及 a和 a的自定义控件TextBox。实际上,我想动态渲染DropDownListTextBox. 例如:当用户点击 aCheckbox时,Textbox将变为 a DropdownList。另一方面,当用户取消选择 时CheckboxDropdownlist将变为Textbox

我知道这可以使用两个控件来完成,这两个控件都设置了可见性。但是我可以在自定义控件上做到这一点吗?

4

2 回答 2

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

希望这就是你要找的。

于 2012-09-18T08:53:42.410 回答
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;
}

如果CheckBox 被选中,则此代码段将显示一个 dropDownList ,如果未选中则更改为TextBox。尽管这是可能的,但我认为这不是正确的方法。(例如:需要 AutoPostBack,设置可见性...)

你想达到什么目标?

于 2012-09-18T08:46:41.010 回答