ASP.NET 產生動態控制項並且可以刪除

如何在ASP.NET動態產生使用者控制項,也可以刪除。中間透過Session作暫存的動作。

如何在ASP.NET動態產生使用者控制項,也可以刪除。中間透過Session作暫存的動作。

完整的程式範例:

 

Web User Control

    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        public string SetKPIName
        {
            get { return lbKPIName.Text; }

            set { lbKPIName.Text = value; }
        }

        public string SetKPIQuest
        {
            get { return tbQuest.Text; }

            set { tbQuest.Text = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public event EventHandler RemoveUserControl;

        protected void ButtonDeleteMe_Click(object sender, EventArgs e)
        {
            RemoveUserControl(sender, e);

            return;
        }
    }

Default.aspx.cs

    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
            }
            else
            {
                CreateUserControl();
            }
        }

        public void CreateUserControl()
        {
            plKPIControl.Controls.Clear();

            for (int index = 0; index < Session.Count; index++)
            {
                if (Session[index] != null && Session[index].ToString().Trim() != "")
                {
                    switch (Session[index].ToString())
                    {
                        case "ASP.webusercontrol1_ascx":
                            WebUserControl1 control = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx");
                            WebUserControl1 sessionControl = (WebUserControl1)(Session[index]);

                            control.SetKPIName = sessionControl.SetKPIName;
                            control.SetKPIQuest = sessionControl.SetKPIQuest;

                            control.RemoveUserControl += this.HandleRemoveUserControl;

                            plKPIControl.Controls.Add(control);
                            break;
                    }
                }
            }

        }

        public void HandleRemoveUserControl(object sender, EventArgs e)
        {
            Button remove = (sender as Button);
            WebUserControl1 removeControl = (WebUserControl1)remove.Parent;

            int deleteSessionIndex = -1;
            int deleteControlIndex = -1;

            string szKPINameCompare = removeControl.SetKPIName;

            for (int index = 0; index < plKPIControl.Controls.Count; index++)
            {
                WebUserControl1 itemControl = (WebUserControl1)plKPIControl.Controls[index];

                for (int i = 0; i < Session.Count; i++)
                {
                    if (Session[i] != null && Session[i].ToString().Trim() != "")
                    {
                        switch (Session[i].ToString())
                        {
                            case "ASP.webusercontrol1_ascx":
                                {
                                    // Create instance of the UserControl SimpleControl
                                    WebUserControl1 myItem = (WebUserControl1)(Session[i]);

                                    if (itemControl.SetKPIName == myItem.SetKPIName)
                                    {
                                        if (myItem.SetKPIName == szKPINameCompare)
                                        {
                                            deleteSessionIndex = i;
                                            deleteControlIndex = index;
                                        }
                                        else
                                        {
                                            //keep values of control
                                            myItem.SetKPIName = itemControl.SetKPIName;
                                            myItem.SetKPIQuest = itemControl.SetKPIQuest;

                                        }
                                    }
                                }
                                break;
                        }
                    }
                }
            }

            if (deleteSessionIndex != -1)
            {
                Session.RemoveAt(deleteSessionIndex);
                plKPIControl.Controls.Remove((WebUserControl1)remove.Parent);
                CreateUserControl();
            }
        }

        protected void ButtonAddControl_Click(object sender, EventArgs e)
        {
            WebUserControl1 control = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx");

            string guid = System.Guid.NewGuid().ToString();

            control.SetKPIName = guid;

            Session.Add(guid, control);
            plKPIControl.Controls.Add(control);
        }

        protected void AddOneDefaultControl(string txtQuest)
        {
            WebUserControl1 control = (WebUserControl1)Page.LoadControl("~/WebUserControl1.ascx");

            string guid = System.Guid.NewGuid().ToString();

            control.ID = guid;
            control.SetKPIName = guid;
            control.SetKPIQuest = txtQuest;

            Session.Add(guid, control);
            plKPIControl.Controls.Add(control);
        }

        protected void ButtonAddDefaultControls_Click(object sender, EventArgs e)
        {
            AddOneDefaultControl("ccccc");
            AddOneDefaultControl("ddddd");
            AddOneDefaultControl("aaaaa");
        }
    }