Update UserControl fields in RadDock

2 posts, 0 answers
  1. RadTony
    RadTony avatar
    39 posts
    Member since:
    Jan 2010

    Posted 16 Feb 2010 Link to this post

    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">&nbsp;</td> 
        </tr>     
         
        <tr>       
         
            <td colspan="4">  
                <nobr> 
                <asp:Button runat="server" ID="BtnUpdate" Text="Update" OnClick="BtnUpdate_Click"/> &nbsp; 
                <asp:Button runat="server" ID="BtnCancel" Text="Cancel"  OnClick="BtnCancel_Click"/> &nbsp; 
                <asp:Button runat="server" ID="BtnDetails" Text="Details"  OnClick="BtnDetails_Click"/> &nbsp; 
                </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("&nbsp;"); 
                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>&nbsp;</td> <td>&nbsp;</td>&nbsp;<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; 
        }  
           
    }   
     

  2. Pero
    Admin
    Pero avatar
    1156 posts

    Posted 19 Feb 2010 Link to this post

    Hello RadTony,

    The problematic code is the following:
    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";

    Notice the highlighted lines - dock and dockSpace will have the same ID and an error will be thrown. So if you replace dockSpace.ID = string.Format("RadDock{0}", dock.UniqueName); with
    dockSpace.ID = string.Format("RadDock{0}", dockSpace.UniqueName); there shouldn't be any problems. You should dynamically create RadDock's in the Page_Init so that the docks will be positioned in the correct zone and at the correct index (if you plan on saving the DockState). Please take a look at the following projects from our Code Library. They show how to dynamically create docks and save their state in DB:



    Greetings,
    Pero
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
Back to Top