簡體   English   中英

單擊按鈕添加動態控件(控件集)

[英]Add Dynamic Controls (set of Controls) on Button Click

我需要在一個通過單擊按鈕動態生成的Web窗體上,添加一個面板,其中包含一個用戶控件(文本框)+ 2個帶有各自項目模板的Gridviews和對這些控件進行操作的其他驗證。 因此,每次用戶單擊“添加面板”按鈕時,都會使用上述控件生成一個新面板。

我正在嘗試“數據列表”和“轉發器”的路由,但是將數據綁定到上述控件正成為一個挑戰。 我想在繼續前進之前調查其他領域來實現這一目標。

任何幫助,鏈接,建議或指針將不勝感激?

只是為了讓您入門。

  • 用戶控件:DynamicUC.ascx
  • 使用該用戶控件的頁面:DynamicPage.aspx

DyanamicUC.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;
    }
}

有很多要解釋的東西。 但我怕時間很少。 但這應該給出一些提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM