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

Postback not firing custom command

2 Answers 156 Views
Dock
This is a migrated thread and some comments may be shown as answers.
Atiq Ur Rehman
Top achievements
Rank 1
Atiq Ur Rehman asked on 22 Jul 2008, 11:35 AM
Hi guys,

I am stuck with something here. Basically I wanted a delete button for my docks, so I implemented the dock custom command which when user clicks firs the command and deletes the dock. I also needed confirmation on it so I implemented confirmation for client side. The only problem now is that I have to check something else as well before I delete the dock, so I have this database procedure which checks and returns more then 0 if there is something, then I show an error message saying that user needs to delete that thing before they can delete dock, but my custom command doesn't fire the postback although I have got postback enabled. Is there anyway to ajaxify this thing so that user see the error message which I want to show? Here is the code;

here is the code file;
        Protected Sub Page_Init(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Init  
            createDocks()  
        End Sub 
 
 
    Sub createDocks()  
            Try 
                Dim dr As IDataReader = "Calling from the database here" 
                While dr.Read()  
                    Dim aDock As New RadDock()  
                    aDock.DockMode = DockMode.Docked  
                    aDock.UniqueName = Guid.NewGuid().ToString()  
                    aDock.ID = CStr(dr.Item("ID"))  
                    aDock.Title = CStr(dr.Item("Title"))  
                    Dim custCMD As New DockCommand()  
                    custCMD.Name = "deleteCMD" 
                    custCMD.CssClass = "pullImage" 
                    custCMD.Text = "Delete" 
                    custCMD.AutoPostBack = True 
                    custCMD.OnClientCommand = "CustomCommand" 
                    aDock.Commands.Add(custCMD)  
                    AddHandler aDock.Command, AddressOf dock_Command  
                    aDock.DefaultCommands = Dock.DefaultCommands.None  
                    Dim triger As New AsyncPostBackTrigger()  
                    triger.ControlID = aDock.ID  
                    triger.EventName = "DockPositionChanged" 
                    uPanel.Triggers.Add(triger)  
                    rdZone.Controls.Add(aDock)  
                End While 
                dr.Dispose()  
            Catch ex As Exception  
                Dim exp As New exHandle  
                lblmsg.Text = exp.processExp(ex, "", Now)  
            End Try 
        End Sub 
 
 
      Sub dock_Command(ByVal sender As ObjectByVal e As DockCommandEventArgs)  
            If Session("ClassID"Is Nothing Then 
                mainPNL.Visible = False 
                notAllowed.Visible = True 
            Else 
                If e.Command.Name = "deleteCMD" Then 
                    Dim aDock As RadDock = sender  
                    Dim ID_int As Integer = aDock.ID  
                    Dim ClassID As Integer = CInt(Session("ClassID"))  
                      
                    Dim SetsCount As Integer = "Calling from database to check if there is anything" 
                    If (SetsCount > 0) Then 
"NOT SHOWING THIS THING HERE." 
                        lblmsg.Text = "<BR>There are " & SetsCount & " in this section. Please delete them first." 
 
                    Else 
                        'delete from database here and release session  
                        ScriptManager.RegisterStartupScript(uPanel, Me.[GetType](), "RemoveDock"String.Format("function _removeDock() {{" & Chr(13) & "" & Chr(10) & "" & Chr(9) & "Sys.Application.remove_load(_removeDock);" & Chr(13) & "" & Chr(10) & "" & Chr(9) & "$find('{0}').undock();" & Chr(13) & "" & Chr(10) & "" & Chr(9) & "$get('{1}').appendChild($get('{0}'));" & Chr(13) & "" & Chr(10) & "" & Chr(9) & "$find('{0}').doPostBack('DockPositionChanged');" & Chr(13) & "" & Chr(10) & "}};" & Chr(13) & "" & Chr(10) & "Sys.Application.add_load(_removeDock);", (DirectCast(sender, RadDock)).ClientID, uPanel.ClientID), True)  
                    End If 
                End If 
            End If 
        End Sub 

here is the aspx file;
    <asp:ScriptManager id="ScriptManager" runat="server"/>    
         <radT:radformdecorator id="FormDecorator1" runat="server" decoratedcontrols="all" 
            skin="Default">  
        </radT:radformdecorator> 
    
  <div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div> 
     <script type="text/javascript">  
        function GetRadWindow()  
        {  
            var oWindow = null;  
            if (window.radWindow) oWindow = window.radWindow;  
            else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;  
            return oWindow;  
        }        
         
        function returnToParent()  
        {  
            var oWnd = GetRadWindow();  
            oWnd.close();  
        }  
        function CustomCommand(dock, args)  
        {  
            //You can implement your custom logic in this method  
            if (!confirm("Are you sure you want to delete this section?"))  
            {  
                args.set_cancel(true);  
            }  
        }  
        </script>        
            <table width="100%" id="notAllowed" runat="server">  
    <tr> 
    <td>You don't have permission to view this page. Please contact support.<br /> 
    <input id="Button1" onclick="returnToParent(); return false;" type="button"   
                value="Close" class="button" /></td>  
    </tr> 
    </table>    
       <asp:Panel runat="server" ID="mainPNL" Width="500">   
<table cellpadding="0" cellspacing="0" border="0" width="100%">  
<tr> 
<td> 
Select a section and drag it up and down to change its order.  
<asp:Label ID="lblmsg" runat="server" Font-Bold="True"   
                ForeColor="#C00000"></asp:Label> 
</td> 
</tr> 
<tr> 
<td> 
       <radT:raddocklayout runat="server" id="rdLayout" Skin="Sunset">  
            <radT:raddockzone runat="server" id="rdZone" Width="100%" Skin="Sunset">  
            </radT:raddockzone> 
            <div style="display:none">  
                Hidden UpdatePanel, which is used to receive the new dock controls.   
                We will move them with script to the desired initial dock zone.  
                <asp:updatepanel runat="server" id="uPanel">  
                    <triggers> 
             
                    </triggers> 
                </asp:updatepanel> 
            </div> 
        </radT:raddocklayout> 
</td> 
</tr> 
<tr> 
<td><br /> 
<input id="closeBTN" onclick="returnToParent(); return false;" type="button"   
                value="Exit" class="button" /> 
                  &nbsp;&nbsp;  
<%--                <asp:Button ID="exitBTN" runat="server" Text="Exit" Width="130px"   
                    CausesValidation="False" />--%> 
                      
                     &nbsp;&nbsp;<asp:Button ID="resetBTN" runat="server"   
        CausesValidation="False" Text="Reset" Width="130px" /> 
&nbsp;  
                      
                     <asp:Button ID="submitBTN" runat="server" Text="Save & Exit" Width="130px"   
                    CausesValidation="False" /> 
</td> 
</tr> 
</table>        
 
</asp:Panel> 

Thanks
Atiq

2 Answers, 1 is accepted

Sort by
0
Atiq Ur Rehman
Top achievements
Rank 1
answered on 22 Jul 2008, 12:45 PM
Also I forgot one thing.

I have a reset button as well which should reset all the docks where they were before. What would be the best approach to do that? call the createDocks() but that doesn't work? can someone please help.

Thanks
Atiq
0
Accepted
Sophy
Telerik team
answered on 24 Jul 2008, 11:19 AM
Hi Atiq,

I prepared a sample page based on the code snippets you have sent us and commented some lines which needed missing resources. However, I was not able to reproduce the problem with command event handler not being fired. Running the page on my side the command event handler was fired but the message you mention was not displayed. That is why, I placed the label whose text is updated in the command event handler inside an UpdatePanel and this solved the problem. I have attached my test page which demonstrates how to fix the described issue.
Regarding your other question about the reset button you will need to save the old state in a Cookie, in the Session or in database depending on the requirements of your exact scenario. Then at reset button click apply the correct state in a way similar to the one
demonstrated in the RadDockLayout1_LoadDockLayout method in the Dynamically Created Docks online example, e.g.:
Private Sub SetPositions()   
    Dim positions As New Dictionary(Of StringString)()   
    Dim indices As New Dictionary(Of StringInteger)()   
    For Each state As DockState In OldDockStates   
        positions(state.UniqueName) = state.DockZoneID   
        indices(state.UniqueName) = state.Index   
    Next   
    RadDockLayout1.SetRegisteredDockParents(positions, indices)   
End Sub  

In case the above suggestion cannot help you solve the problems, please, open a support ticket and attach a simple running application which demonstrates your scenario and reproduces the problems you experience. We will take a closer look at your code, test it on our side, investigate the issues and do our best to help you. For your convenience I have attached a screenshot with instructions how to open a support ticket.

Best regards,
Sophy
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
Tags
Dock
Asked by
Atiq Ur Rehman
Top achievements
Rank 1
Answers by
Atiq Ur Rehman
Top achievements
Rank 1
Sophy
Telerik team
Share this question
or