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.
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top