This is a migrated thread and some comments may be shown as answers.

Update UserControl fields in RadDock

1 Answer 91 Views
Dock
This is a migrated thread and some comments may be shown as answers.
RadTony
Top achievements
Rank 1
RadTony asked on 16 Feb 2010, 05:44 PM
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; 
    }  
       
}   
 

1 Answer, 1 is accepted

Sort by
0
Pero
Telerik team
answered on 19 Feb 2010, 11:31 AM
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.
Tags
Dock
Asked by
RadTony
Top achievements
Rank 1
Answers by
Pero
Telerik team
Share this question
or