Store Custom Docks in Database - SUPER EASY

2 posts, 0 answers
  1. ataxia1
    ataxia1 avatar
    16 posts
    Member since:
    May 2007

    Posted 17 Jul 2008 Link to this post

    I've spent many days in the past week trying to find a good way to make custom docks and store the config in a database.  Most of that time was on this forum, going through other people's posts who were fighting the same issues.  I also downloaded some of the other samples, and most were very complex, and I never got even one of the examples to work.  So, I started from scratch, using the Portal Demo as the example.  In order to save others the rough week I had, I'm posting my solution here.

    Download the dynamically created controls portal example:  http://www.telerik.com/demos/aspnet/prometheus/Dock/Examples/MyPortal/DefaultVB.aspx

    All I did was add some script to the CurrentDockStates property to save a value on a SET command and retrieve a value on a GET command if no value was already present.  It works like a champ.  Hope this helps.  Here's my new CurrentDockStates property.

    Enjoy,

    - Brad

            Private Property CurrentDockStates() As List(Of DockState)  
                Get 
                    Dim _currentDockStates As List(Of DockState) = DirectCast(Session("UserPreferences.PortalSession"), List(Of DockState))  
                    If [Object].Equals(_currentDockStates, NothingThen 
                        'Make an empty configuration list  
                        _currentDockStates = New List(Of DockState)()  
                        'Convert our stored config to the active config  
                        ''I HAVE A FUNCTION THAT GETS THE USER'S DOCKSTATE STRING FROM A  
                        ''  TABLE IN THE DATABASE CALL GetUserPreference  
                        ''  INSERT WHATEVER DATABASE ROUTINE YOU WANT IN PLACE OF IT  
                        Dim strLoadedConfig As String = GetUserPreference("PortalConfiguration")  
                        'If we found nothing, leave the current state empty  
                        If strLoadedConfig <> "" Then 
                            Try 
                                'Use the stored config  
                                'Convert the stored config to an array, splitting at the *s  
                                Dim aConfig As Array = Split(strLoadedConfig, "*")  
                                Dim strConfigItem As String 
                                Dim dsWorking As DockState  
                                'Parse through the array, turning the dockstate strings into dockstates  
                                'Then add the dockstates to the dockstate list  
                                For Each strConfigItem In aConfig  
                                    'Start a fresh dockstate  
                                    dsWorking = New DockState  
                                    'Parse the string back into dock settings  
                                    dsWorking = DockState.Deserialize(strConfigItem)  
                                    'Add the settings back into the current session  
                                    _currentDockStates.Add(dsWorking)  
                                Next 
                            Catch ex As Exception  
                                'Something was wrong with the data  
                                'Default back to blank so the page won't crash  
                            End Try 
                            'Set the new value into the session variable  
                            Session("UserPreferences.PortalSession") = _currentDockStates  
                        End If 
                    End If 
                    Return _currentDockStates  
                End Get 
                Set(ByVal value As List(Of DockState))  
                    Session("UserPreferences.PortalSession") = value  
                    'Session being updated; Update the database too  
                    'Convert list of dockStates to a delimited string  
                    'We'll use * since commas are used in the dockStates  
                    Dim sbListConverter As New System.Text.StringBuilder  
                    For Each dockState As DockState In value  
                        sbListConverter.AppendFormat("{0}*", dockState.ToString)  
                    Next 
                    Dim strDockConfig As String = sbListConverter.ToString.TrimEnd(Convert.ToChar("*"))  
                    ''I HAVE A FUNCTION THAT SAVES THE USER'S DOCKSTATE STRING TO A  
                    ''  TABLE IN THE DATABASE CALLED UpdateUserPreference  
                    ''  INSERT WHATEVER DATABASE ROUTINE YOU WANT IN PLACE OF IT  
                    ''  SAVE IN A LARGE ENOUGH TEXT FIELD [varChar(MAX)?] TO HOLD  
                    ''  ALL THE STATE INFO  
                    'Save string to database  
                    UpdateUserPreference("PortalConfiguration", strDockConfig)  
                End Set 
            End Property 
  2. Zyguy
    Zyguy avatar
    23 posts
    Member since:
    Jan 2008

    Posted 12 Aug 2008 Link to this post

    Thanks Brad, I will give this a shot.
Back to Top