如何在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");
}
}