【问题标题】:Add Dynamic Controls (set of Controls) on Button Click在按钮单击时添加动态控件(控件集)
【发布时间】:2015-05-09 20:44:33
【问题描述】:

我需要添加一个面板,其中包含一个用户控件(文本框)+ 2 个具有自己的项目模板的 Gridviews + 对这些控件进行的其他验证,在一个由按钮单击动态产生的 Web 表单上。所以每次用户点击“添加面板”按钮时,都会生成一个带有上述控件的新面板。

我正在尝试数据列表和中继器的路线,但将数据绑定到上述控件正在成为一项挑战。在继续前进之前,我想调查其他领域以实现这一目标。

任何帮助、链接、建议或指针将不胜感激?

【问题讨论】:

    标签: javascript c# jquery asp.net


    【解决方案1】:

    只是为了让你开始。

    • 用户控件:DynamicUC.ascx
    • 使用该用户控件的页面:DynamicPage.aspx

    DynamicUC.ascx

    <div style="float: left">
        <asp:TextBox ID="tbMyTextBox" runat="server" />
    
        <asp:GridView runat="server" ID="gvNumbers" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="Serial" HeaderText="Seiral" />
                <asp:TemplateField HeaderText="Item Name">
                    <ItemTemplate>
                        <%# Eval("Item") %>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    
    </div>
    

    DynamicUC.ascx.cs

    public partial class DynamicUC : UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            public void PopulateData(string value)
            {
                tbMyTextBox.Text = value;
                gvNumbers.DataSource = Enumerable.Range(1, 5).Select(i => new { Serial = i, Item = "Item " + i });
                gvNumbers.DataBind();
            }
    
            public string GetData()
            {
                return Server.HtmlEncode(tbMyTextBox.Text);
            }
        }
    

    DynamicPage.aspx

    <asp:Button ID="btnAddUC" Text="Add UC" runat="server" OnClick="btnAddUC_Click" />
    <asp:Button ID="btnGetUCValues" Text="Get UC Values" runat="server" OnClick="btnGetUCValues_Click" />
    
    <asp:Panel runat="server" ID="pnlDynamicUCPanel" Style="overflow: auto;">
    </asp:Panel>
    <asp:Label ID="lblUCValues" runat="server" Style="clear: both;" />
    

    DynamicPage.aspx.cs

    public partial class DynamicPage : System.Web.UI.Page
    {
        private int NumberOfDynamicControls
        {
            get
            {
                var numberOfDynamicControls = ViewState["__dynamicUCCount"];
                if (numberOfDynamicControls != null)
                {
                    return (int)numberOfDynamicControls;
                }
                return 0;
            }
            set
            {
                ViewState["__dynamicUCCount"] = value;
            }
        }
        private List<DynamicUC> _dynamicUCList;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            RestoreDynamicUC();
        }
    
        protected void btnAddUC_Click(object sender, EventArgs e)
        {
            CreateDyanamicUC(NumberOfDynamicControls);
            NumberOfDynamicControls++;
        }
    
        private void RestoreDynamicUC()
        {
            if (NumberOfDynamicControls == 0)
                return;
            for (int i = 0; i < NumberOfDynamicControls; i++)
            {
                CreateDyanamicUC(i);
            }
        }
    
        private void CreateDyanamicUC(int dataIndex)
        {
            if (_dynamicUCList == null)
            {
                _dynamicUCList = new List<DynamicUC>();
            }
            var dynamicUC = LoadControl("DynamicUC.ascx") as DynamicUC;
            dynamicUC.PopulateData("Data " + dataIndex);
            pnlDynamicUCPanel.Controls.Add(dynamicUC);
            _dynamicUCList.Add(dynamicUC);
        }
    
        protected void btnGetUCValues_Click(object sender, EventArgs e)
        {
            var valuesText = "";
            if (_dynamicUCList != null)
            {
                valuesText = string.Join(", ", _dynamicUCList.Select(duc => duc.GetData()));
            }
            lblUCValues.Text = "UC Values: " + valuesText;
        }
    }
    

    有很多要解释的;但恐怕我的时间不多了。但这应该会给出一些提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2012-12-19
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多