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

RadDock Example from vb to c# !!

2 Answers 144 Views
Dock
This is a migrated thread and some comments may be shown as answers.
A.mass
Top achievements
Rank 1
A.mass asked on 27 Apr 2009, 04:17 AM


Hello everyone,
I found an interesting easy working example for RadDock but teh problem that I'm facing that its in vb, and the application is c#
can anyone help me to convert it [ Please note that the online converters couldn't convert it specially the bold + underlined lines ]

Imports System 
Imports System.Data 
Imports System.Configuration 
Imports System.Collections 
Imports System.Web 
Imports System.Web.Security 
Imports System.Web.UI 
Imports System.Web.UI.WebControls 
Imports System.Web.UI.WebControls.WebParts 
Imports System.Web.UI.HtmlControls 
Imports System.Data.SqlClient 
Imports Telerik.Web.UI 
Imports System.Collections.Generic 
Imports System.Text 
Imports System.Web.Script.Serialization 
 
Partial Public Class DefaultVB 
    Inherits System.Web.UI.Page 
    Private _conn As New SqlConnection(ConfigurationManager.ConnectionStrings("DockConnectionString").ConnectionString) 
    Private _count As Integer = 0 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 
 
    End Sub 
    Protected Sub RadDockLayout1_LoadDockLayout(ByVal sender As Object, ByVal e As Telerik.Web.UI.DockLayoutEventArgs) 
        
        Dim dock As RadDock = Nothing 
        Dim serializer As New JavaScriptSerializer() 
        Dim converters As New List(Of JavaScriptConverter)() 
        converters.Add(New UnitConverter()) 
        serializer.RegisterConverters(converters) 
 
        'Get saved state string from the database - set it to dockState variable for example  
        Dim dockState As String = "" 
        Try 
 
            _conn.Open() 
            Dim command As New SqlCommand("select State from States where id=1", _conn) 
            dockState = command.ExecuteScalar().ToString() 
            _conn.Close() 
        Catch 
        End Try 
 
        Dim currentDockStates As String() = dockState.Split("|"c) 
        For Each stringState As String In currentDockStates 
            If stringState.Trim() <> String.Empty Then 
                Dim state As DockState = serializer.Deserialize(Of DockState)(stringState) 
                e.Positions(state.UniqueName) = state.DockZoneID 
                e.Indices(state.UniqueName) = state.Index 
                dock = DirectCast(RadDockLayout1.FindControl(state.UniqueName), RadDock) 
                dock.ApplyState(state) 
            End If 
        Next 
 
    End Sub 
 
    Protected Sub RadDockLayout1_SaveDockLayout(ByVal sender As Object, ByVal e As Telerik.Web.UI.DockLayoutEventArgs) 
        Dim dockState As String 
        Dim serializer As New JavaScriptSerializer() 
        Dim converters As New List(Of JavaScriptConverter)() 
        converters.Add(New UnitConverter()) 
        serializer.RegisterConverters(converters) 
 
        Dim stateList As List(Of DockState) = RadDockLayout1.GetRegisteredDocksState() 
        Dim serializedList As New StringBuilder() 
        Dim i As Integer = 0 
 
        While i < stateList.Count 
            serializedList.Append(serializer.Serialize(stateList(i))) 
            serializedList.Append("|") 
            System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) 
        End While 
 
        dockState = serializedList.ToString() 
        If dockState.Trim() <> [String].Empty Then 
            Try 
                _conn.Open() 
                Dim command As New SqlCommand([String].Format("update States set State='{0}' where id=1", dockState), _conn) 
                command.ExecuteNonQuery() 
                _conn.Close() 
            Catch 
            End Try 
        End If 
    End Sub 
End Class 


Thank you in advance

2 Answers, 1 is accepted

Sort by
0
Accepted
ManniAT
Top achievements
Rank 2
answered on 27 Apr 2009, 08:21 AM
Telrik offers a nice code converter - try it here with your code:
http://converter.telerik.com/

By the way - the first underlined line seems to be an error for me - UnitConverter is not a kind of JavaScriptConverter.
For the second line you have to change the result:
System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1);  
TO  
System.Math.Max(System.Threading.Interlocked.Increment(ref i), i - 1); 


Regards

Manfred
0
Tom
Top achievements
Rank 1
answered on 14 Dec 2009, 08:12 PM
I don't know if you found the missing UnitConverter or not, but Google sent me here so I thought I would update it.  The UnitConverter in the example (http://www.telerik.com/community/forums/aspnet-ajax/docking/is-it-possible-to-save-and-load-a-dock-s-collapse-state.aspx) has a UnitConverter class in the App_Code folder.  You have to create that class yourself in your solution.

Here is my converted C# version:

using System;  
using System.Data;  
using System.Configuration;  
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 System.Web.Script.Serialization;  
using System.Collections.ObjectModel;  
using System.Collections.Generic;  
 
namespace YourNameSpace  
{  
    public class UnitConverter : JavaScriptConverter  
    {  
        public override object Deserialize(System.Collections.Generic.IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)  
        {  
            if (dictionary == null)  
            {  
                throw new ArgumentNullException("dictionary");  
            }  
 
            if (object.ReferenceEquals(type, typeof(Unit)))  
            {  
                double value = Convert.ToDouble(dictionary["Value"]);  
                UnitType unitType = (UnitType)Enum.Parse(typeof(UnitType), dictionary["Type"].ToString());  
                Unit unit = new Unit(value, unitType);  
                return unit;  
            }  
 
            return null;  
        }  
 
 
        public override System.Collections.Generic.IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)  
        {  
            Unit unit = (Unit)obj;  
 
            if (unit != null)  
            {  
                Dictionary<string, object> dict = new Dictionary<string, object>();  
                dict.Add("Type", unit.Type);  
                dict.Add("Value", unit.Value);  
                return dict;  
            }  
 
            return new Dictionary<string, object>();  
        }  
 
        public override System.Collections.Generic.IEnumerable<Type> SupportedTypes  
        {  
            get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(Unit) })); }  
        }  
    }  
}  
 




Tom
Tags
Dock
Asked by
A.mass
Top achievements
Rank 1
Answers by
ManniAT
Top achievements
Rank 2
Tom
Top achievements
Rank 1
Share this question
or