I load Usercontrols dynamically in RadDocks.
    
    
                                I wish to Edit, update, cancel edition, see details of an Employee etc. 
How can I do this ? I'm always getting the mistake : "Several controls with same ID have been found".
Also, please tell me if I can do better. Thanks
This is my user control :
| <%@ Control Language="C#" AutoEventWireup="true" CodeFile="UCEmployee.ascx.cs" Inherits="UCEmployee" %> | 
| <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> | 
| <table border="0" width="100%"> | 
| <tr> | 
| <td align="left" colspan="2">LastName : </td> | 
| <td align="left" colspan="2"> <asp:TextBox runat="server" ID="TxtNom"></asp:TextBox> </td> | 
| </tr> | 
| <tr> | 
| <td align="left" colspan="2">FirstName :</td> | 
| <td align="left" colspan="2"> <asp:TextBox runat="server" ID="TxtPrenom"></asp:TextBox> </td> | 
| </tr> | 
| <tr> | 
| <td colspan="4"> </td> | 
| </tr> | 
| <tr> | 
| <td colspan="4"> | 
| <nobr> | 
| <asp:Button runat="server" ID="BtnUpdate" Text="Update" OnClick="BtnUpdate_Click"/>   | 
| <asp:Button runat="server" ID="BtnCancel" Text="Cancel" OnClick="BtnCancel_Click"/>   | 
| <asp:Button runat="server" ID="BtnDetails" Text="Details" OnClick="BtnDetails_Click"/>   | 
| </nobr> | 
| </td> | 
| </tr> | 
| </table> | 
| --------------------------------------- | 
| using System; | 
| using System.Data; | 
| using System.Configuration; | 
| using System.Collections; | 
| using System.Web; | 
| using System.Web.Security; | 
| using System.Web.UI; | 
| using System.Web.UI.WebControls; | 
| using System.Web.UI.WebControls.WebParts; | 
| using System.Web.UI.HtmlControls; | 
| using Telerik.Web.UI; | 
| using System.Data; | 
| using System.Data.SqlClient; | 
| public partial class UCEmployee : System.Web.UI.UserControl | 
| { | 
| int currentIndex = 0; | 
| protected void Page_Load(object sender, EventArgs e) | 
| { | 
| if (currentIndex > 0) | 
| { | 
| DataTable dt = getEmployeeById(currentIndex); | 
| if (dt != null && dt.Rows.Count > 0) | 
| { | 
| TxtNom.Text = dt.Rows[0]["FirstName"].ToString(); | 
| TxtPrenom.Text = dt.Rows[0]["LastName"].ToString(); | 
| } | 
| } | 
| } | 
| public UCEmployee() | 
| { | 
| } | 
| public UCEmployee(int passedIndex) | 
| { | 
| currentIndex = passedIndex; | 
| } | 
| private DataTable getEmployeeById(int EmployeeID) | 
| { | 
| DataSet ds = new DataSet(); | 
| using (SqlConnection conn = new SqlConnection()) | 
| { | 
| conn.ConnectionString = GetConnectionString(); | 
| SqlCommand cmd = new SqlCommand("SELECT [EmployeeID], [LastName], [FirstName], [Title], [ReportsTo], [Photo], [Notes] FROM [Employees] where EmployeeID = " + EmployeeID, conn); | 
| conn.Open(); | 
| SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd); | 
| sqlAdapter.Fill(ds); | 
| } | 
| DataTable dt = ds.Tables[0]; | 
| return dt; | 
| } | 
| static private string GetConnectionString() | 
| { | 
| return "server=STATION00374;database=Northwind;Integrated Security=SSPI;"; | 
| } | 
| protected void BtnUpdate_Click(object sender, EventArgs e) | 
| { | 
| } | 
| protected void BtnCancel_Click(object sender, EventArgs e) | 
| { | 
| } | 
| protected void BtnDetails_Click(object sender, EventArgs e) | 
| { | 
| } | 
| } | 
And this is my Page where I load all employees :
| <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestUcEmployee.aspx.cs" Inherits="TestUcEmployee" %> | 
| <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> | 
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
| <html xmlns="http://www.w3.org/1999/xhtml" > | 
| <head id="Head1" runat="server"> | 
| <title>Untitled Page</title> | 
| </head> | 
| <body> | 
| <form id="form1" runat="server"> | 
| <div> | 
| <asp:ScriptManager ID="ScriptManager1" runat = "server"></asp:ScriptManager> | 
| <br /> | 
| <br /> | 
| <table> | 
| <tr> | 
| <td style="width:100px"> </td> | 
| <td align="right" id="tdDocks" runat="server" style="width:1000px"> | 
| </td> | 
| </tr> | 
| </table> | 
| </div> | 
| </form> | 
| </body> | 
| </html> | 
| ------------------------------------ | 
| using System; | 
| using System.Data; | 
| using System.Configuration; | 
| using System.Collections; | 
| using System.Web; | 
| using System.Web.Security; | 
| using System.Web.UI; | 
| using System.Web.UI.WebControls; | 
| using System.Web.UI.WebControls.WebParts; | 
| using System.Web.UI.HtmlControls; | 
| using Telerik.Web.UI; | 
| using System.Reflection; | 
| using System.Configuration; | 
| using System.Collections.Generic; | 
| public partial class TestUcEmployee : System.Web.UI.Page | 
| { | 
| protected void Page_Load(object sender, EventArgs e) | 
| { | 
| RadDockLayout layout1 = new RadDockLayout(); | 
| RadDockZone zone1 = new RadDockZone(); | 
| for (int i = 1; i < 12; i++) | 
| { | 
| zone1.Width = Unit.Pixel(900); | 
| zone1.Orientation = Orientation.Horizontal; | 
| if (i % 2 == 0) | 
| { | 
| zone1.BackColor = System.Drawing.Color.PeachPuff; | 
| } | 
| else | 
| { | 
| zone1.BackColor = System.Drawing.Color.AliceBlue; | 
| } | 
| RadBinaryImage image = new RadBinaryImage(); | 
| image.ResizeMode = BinaryImageResizeMode.Fit; | 
| image.Height = Unit.Pixel(100); | 
| image.Width = Unit.Pixel(70); | 
| LiteralControl liSpace = new LiteralControl(" "); | 
| LiteralControl liTitle = new LiteralControl("Title"); | 
| Table table = new Table(); | 
| table.BorderWidth = Unit.Pixel(0); | 
| table.Width = Unit.Percentage(85); | 
| TableRow tr1 = new TableRow(); | 
| TableRow tr2 = new TableRow(); | 
| tr1.HorizontalAlign = HorizontalAlign.Center; | 
| tr2.HorizontalAlign = HorizontalAlign.Center; | 
| TableCell tc1 = new TableCell(); | 
| tc1.Controls.Add(liSpace); | 
| TableCell tc2 = new TableCell(); | 
| /* | 
| if (!dt.Rows[i]["Photo"].Equals(System.DBNull.Value)) | 
| { | 
| image.DataValue = (byte[])dt.Rows[i]["Photo"]; | 
| } | 
| tc2.Controls.Add(image); | 
| */ | 
| Control widget = LoadControl("UCEmployee.ascx", i); | 
| tc2.Controls.Add(widget); | 
| TableCell tc3 = new TableCell(); | 
| tc3.Controls.Add(liSpace); | 
| tr1.Cells.Add(tc1); | 
| tr1.Cells.Add(tc2); | 
| tr1.Cells.Add(tc3); | 
| TableCell tc4 = new TableCell(); | 
| tc4.Controls.Add(liSpace); | 
| TableCell tc5 = new TableCell(); | 
| tc5.Controls.Add(liSpace); | 
| TableCell tc6 = new TableCell(); | 
| tc6.Controls.Add(liSpace); | 
| tr2.Cells.Add(tc4); | 
| tr2.Cells.Add(tc5); | 
| tr2.Cells.Add(tc6); | 
| table.Controls.Add(tr1); | 
| table.Controls.Add(tr2); | 
| RadDock dock = new RadDock(); | 
| dock.UniqueName = Guid.NewGuid().ToString(); | 
| dock.ID = string.Format("RadDock{0}", dock.UniqueName); | 
| dock.Title = "Title";//dt.Rows[i]["FirstName"].ToString() + " " + dt.Rows[i]["LastName"].ToString(); | 
| dock.TitlebarContainer.HorizontalAlign = HorizontalAlign.Center; | 
| dock.ContentContainer.Controls.Add(table); | 
| RadDock dockSpace = new RadDock(); | 
| dockSpace.UniqueName = Guid.NewGuid().ToString(); | 
| dockSpace.ID = string.Format("RadDock{0}", dock.UniqueName); | 
| dockSpace.Style["Width"] = "900px"; | 
| if (i % 3 == 0) | 
| { | 
| dock.Style["Width"] = "300px"; | 
| zone1.Controls.Add(dock); | 
| dockSpace.ContentContainer.Controls.Add(new LiteralControl("<table width='100%' height='10px' border='0'><tr><td> </td> <td> </td> <td></td></tr></table>")); | 
| zone1.Controls.Add(dockSpace); | 
| } | 
| else | 
| { | 
| dock.Style["Width"] = "300px"; | 
| zone1.Controls.Add(dock); | 
| } | 
| } | 
| layout1.Controls.Add(zone1); | 
| tdDocks.Controls.Add(layout1); | 
| } | 
| private UserControl LoadControl(string UserControlPath, params object[] constructorParameters) | 
| { | 
| List<Type> constParamTypes = new List<Type>(); | 
| foreach (object constParam in constructorParameters) | 
| { | 
| constParamTypes.Add(constParam.GetType()); | 
| } | 
| UserControl ctl = Page.LoadControl(UserControlPath) as UserControl; | 
| // Find the relevant constructor | 
| ConstructorInfo constructor = ctl.GetType().BaseType.GetConstructor(constParamTypes.ToArray()); | 
| //And then call the relevant constructor | 
| if (constructor == null) | 
| { | 
| throw new MemberAccessException("The requested constructor was not found on : " + ctl.GetType().BaseType.ToString()); | 
| } | 
| else | 
| { | 
| constructor.Invoke(ctl, constructorParameters); | 
| } | 
| // Finally return the fully initialized UC | 
| return ctl; | 
| } | 
| } |