Delete radtreenode index out of range

7 posts, 0 answers
  1. Gabriele
    Gabriele avatar
    11 posts
    Member since:
    Feb 2012

    Posted 08 May 2012 Link to this post

    Hi all,

     I have a radtreeview with radtreeviewcontextmenu.
     When I right-click on node and select "delete" from contextmenu  I got the following error message :

    "Microsoft JScript  run-time error: Sys.WebForms.PageRequestManagerServerErrorException: Index out of range...."

    aspx:
    <telerik:RadAjaxLoadingPanel ID="ralp" runat="server" />
    <telerik:RadAjaxPanel ID="rap" runat="server" LoadingPanelID="ralp">
    <telerik:RadTreeView  ID="elenco" runat="server" Width="100%" Height="300px" CheckBoxes="True" 
    TriStateCheckBoxes="true" 
    CheckChildNodes="true"  
    EnableViewState="false" 
    AllowNodeEditing="false"
    OnClientContextMenuItemClicking="onClientContextMenuItemClicking"
    OnClientContextMenuShowing="onClientContextMenuShowing" 
    OnNodeEdit="elenco_NodeEdit" 
    EnableDragAndDrop="True" 
    OnClientNodeDropping="onNodeDropping" 
    OnClientNodeDragging="onNodeDragging" 
    MultipleSelect="true" 
    EnableDragAndDropBetweenNodes="true" PersistLoadOnDemandNodes="False">         
    <DataBindings><telerik:RadTreeNodeBinding Expanded="True"/></DataBindings>
    </telerik:RadTreeView>
    </telerik:RadAjaxPanel>

    My client side function to manage context menu click :

    function onClientContextMenuItemClicking(sender, args) {

            var menuItem = args.get_menuItem();
            var treeNode = args.get_node();
            var treeView = $find("<%= elenco.ClientID %>");
            var node = treeView.findNodeByText(args.get_node().get_text());
           // menuItem.get_menu().hide();

     switch (menuItem.get_value()) {

    case "elimina":
                    var result = confirm("Si vuole cancellare la cartella: " + treeNode.get_text());
                    eventArgs.set_cancel(!result);
                    var allNodes = treeView.get_allNodes();
                    if (allNodes.length < 1) { alert("La struttura è vuota!"); return false; }
                    var selectedNode = treeView.get_selectedNode();
                    if (!selectedNode) { alert("Selezionare prima un elemento"); return false; }
                    if (allNodes.length == 1) {
                    if (!confirm("Si vuole davvero eliminare l'ultimo elemento presente?"))
                    return false;                }
                    var selectedNode = treeView.get_selectedNode();
                    //alert(selectedNode.get_text());
                    treeView.trackChanges();
                    var parent = selectedNode.get_parent();
                    //alert(parent.get_text());
                    parent.get_nodes().remove(selectedNode);
                    treeView.commitChanges();
                    return false;
                    break;     }    }

    What's wrong ?
    I've tried to remove all drag'n'drop client side events (OnClientNodeDropping,OnClientNodeDragging) but same result
    Diasbled ViewState , nothing to do..

    Might you help me please ?
    Thank you

    Gabriele








  2. Plamen
    Admin
    Plamen avatar
    2731 posts

    Posted 11 May 2012 Link to this post

    Hi Gabriele,

     
    I have inspected the code that you posted but could not reproduce the error locally. I am attaching my test sample web page that worked properly at my side so please review it and if you still observe the issue please let me know what else should be added in order to reproduce it locally.  

    Hope this will help.

    Regards,
    Plamen Zdravkov
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Gabriele
    Gabriele avatar
    11 posts
    Member since:
    Feb 2012

    Posted 11 May 2012 Link to this post

    Thanks so much Plamen Zdravkov,

    I forgot some code behind.. sorry
    I've discovered what causes the error .
    In code behind I use the ContextMenuItemClick server side event to intercept the client operations 
    My aim is to store the tree structure into db after every single crud client side operation
    Here we go

    Protected Sub elenco_ContextMenuItemClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTreeViewContextMenuEventArgs) Handles elenco.ContextMenuItemClick

           Try
                For Each operation As ClientOperation(Of RadTreeNode) In elenco.ClientChanges
                    Dim node As RadTreeNode = operation.Item
                    Select Case operation.Type
                        Case ClientOperationType.Insert
                          'new
                            Call salva_struttura(node.Text, e.Node.Value.Substring(1, e.Node.Value.Length - 1), "new")
                            Exit Select
                            Case ClientOperationType.Remove
                                'delete
                                Call salva_struttura(node.Text, e.Node.Value.Substring(1, e.Node.Value.Length - 1), "del")
                                Exit Select
                        Case ClientOperationType.Update
                            Dim update As UpdateClientOperation(Of RadTreeNode) = DirectCast(operation, UpdateClientOperation(Of RadTreeNode))
                            'edit
                            Exit Select
                    End Select
                Next
            Catch ex As Exception
                Throw (ex)
            End Try
           
        End Sub

    salva_struttura is a routine to store the tree structure in my postgresql db. It works correctly.
    Furthermore if you comment or cancel all the code inside the above routine the error persists..!!
    Try with just...

    Protected Sub elenco_ContextMenuItemClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTreeViewContextMenuEventArgs) Handles elenco.ContextMenuItemClick 
    End Sub

    ...and you should still get the index error !

    It's very odd, isn't it ?
    thanks

    Gabriele
  5. Plamen
    Admin
    Plamen avatar
    2731 posts

    Posted 16 May 2012 Link to this post

    Hello Gabriele,

     
    I have tested again but could not observe the unusual behavior again. Here is a video of my test. Please review it and let me know what else should be added to my code in order to observe it. 

    Would you please specify if it can be reproduced in our on-line demo as well?

    All the best,
    Plamen Zdravkov
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  6. Gabriele
    Gabriele avatar
    11 posts
    Member since:
    Feb 2012

    Posted 17 May 2012 Link to this post

    Hi Plamen , 

    You're very very kind!
    I'll try to clean up my solution and rebuild it from scratch.

    Just one more little help..
    Two quick questions :

    1.Is it correct my approach ? 
    CRUD operations  just client side and then, after each one,  server side db storage ?
    Is there in your web forum an exhaustive working example according to my method ?

    2.Each one of the following client side activity
    NODE INSERT : tree.get_nodes().add(node);
    NODE DELETE: node.get_parent().get_nodes().remove(node);
    NODE UPDATE: node.startEdit();
    get intercepted through the server side event ContextMenuItemClick and 
     by routine "For Each operation As ClientOperation(Of RadTreeNode) In elenco.ClientChanges..." ? 
    I mean, that happens automatically after every nodeclick ?? Even the update one ?

    I hope I explained myself properly
    Thanks again

    Gabriele
  7. Plamen
    Admin
    Plamen avatar
    2731 posts

    Posted 22 May 2012 Link to this post

    Hi Gabriele,

     
    1.If you are trying to trigger from the client side some CRUD events you can use an Ajax Request to trigger the server actions.

    2.Unfortunately it is not very clear what exactly are you trying to achieve and why do you handle the client events after the server one. Would you please explain the reason for implementing it this way?

    All the best,
    Plamen Zdravkov
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  8. Gabriele
    Gabriele avatar
    11 posts
    Member since:
    Feb 2012

    Posted 24 May 2012 Link to this post

    Hi Plamen ,  

    as I wrote before I 'm tryin' to implement the following solution :

    - Client operator will operate on radtreeview just by client side 
    - Operations allowed are: insert node, edit node, delete node (CRUD)
    - All above operations are selectable from a radtreeviewcontextmenu
    - I would like to manage every CRUD activity on client side through javascript functions
    - javascript  functions for insert,edit and delete are already up and perfectly working (except the index problem with node deletion..)
    - After every crud operation I want to store in my postgresql db the treeview structure obviously server side
    - As you suggest me now I'm tryin' to get every single operation on client side through the server side event ContextMenuItemClick 
    -  Inside the above event I'm tryin' to intercept every CRUD activity with the following routine :

      For Each operation As ClientOperation(Of RadTreeNode) In elenco.ClientChanges
                    Dim node As RadTreeNode = operation.Item
                    Select Case operation.Type
                        Case ClientOperationType.Insert
        Case ClientOperationType.Remove
                        Case ClientOperationType.Update
                    End Select 
    Next

    INSERT : I can intercept the insert operation and get the newnode stored in my db
    DELETE: I have index out of range problem on remove node
    UPDATE: I can't get on server side the javascript  "node.startEdit();"

    At last I guess I'll leave this "client side to serve side method" doing everyting  on server side..

    English is not my language so I hope I have expressed myself clearly and correctly this time
    Thanks again Plamen Zdravkov for your help and attention. 
    You can consider this thread closed, Bye !!
    Gabriele

Back to Top
UI for ASP.NET Ajax is Ready for VS 2017