0

我需要在添加按钮单击事件上动态生成 3 个 DropDownList 框。生成 DDL 后,我应该能够为其分配数据源,并在 c# asp.net 中对它们执行 DDL-selectedEventChanged 功能。
下面的链接正是我正在寻找的,但我无法分配数据源或我无法执行任何功能

"通过单击按钮添加多个 DropDownLists "

任何更好的想法请帮助

如果我按下按钮,我需要一次获得 3 个 DDL,如果我再次按下它应该再次生成,所以点击次数 = 否。每行包含三个 DDL 的行数

4

1 回答 1

1

这是示例代码。唯一的技巧是您需要在回发后再次加载这些动态控件。否则,您将无法访问这些内容。

在此处输入图像描述

<asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
<asp:Button runat="server" ID="AddButton" OnClick="AddButton_Click" Text="Add" />

private List<int> _controlIds;

private List<int> ControlIds
{
    get
    {
        if (_controlIds == null)
        {
            if (ViewState["ControlIds"] != null)
                _controlIds = (List<int>)ViewState["ControlIds"];
            else
                _controlIds = new List<int>();
        }
        return _controlIds;
    }
    set { ViewState["ControlIds"] = value; }
}

private List<string> DataSource
{
    get { return new List<string> { "One", "Two", "Three" }; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        var dataSource = DataSource;

        foreach (int id in ControlIds)
        {
            var ddl = new DropDownList();
            ddl.ID = id.ToString();

            foreach (var data in dataSource)
                ddl.Items.Add(new ListItem(data));

            PlaceHolder1.Controls.Add(ddl);
        }
    }
}

protected void AddButton_Click(object sender, EventArgs e)
{
    var dataSource = DataSource;
    for (int i = 0; i < 3; i++)
    {
        var reqs = ControlIds;
        int id = ControlIds.Count + 1;

        reqs.Add(id);
        ControlIds = reqs;

        var ddl = new DropDownList();
        ddl.ID = id.ToString();

        foreach (var data in dataSource)
            ddl.Items.Add(new ListItem(data));

        PlaceHolder1.Controls.Add(ddl);
    }
}
于 2013-02-26T17:41:57.407 回答