Page 3 of 3 FirstFirst 123
Results 21 to 30 of 30

Thread: [2.2]Ext.ux.tree.PagingTreeLoader

  1. #21

    Default

    Superduke,
    I solved that issue by modifying pagingTreeLoader.js and passing pagingToolbar from treePanel itself. I will try your option as well..your's one is easy enough...

  2. #22

    Default

    Today I moved to latest3.0 release. There example posted is throwing exception:

    this.field is null.

    did u encountered same issue?

  3. #23

    Default

    I am able to integrate it to ext3.0RC1.
    but I am facing issue with reload of tree. After some update i want to relaod the tree but call itself does not fire, which used to fire with normal treeLoader

  4. #24

    Default

    I am so sorry to forget about this thread .

    yes I have rewrote and uploaded the PagingTreeLoader(2009-4-28) to fix some bugs,and had tested in IE6/firefox3/chrome1/safari4, support ext2.x ,of course it is not to be compressed.

    Additional,I also have rewrote this extention to support the latest Ext3.0 RC1
    http://extjs.com/forum/showthread.php?p=322438
    thanks!

  5. #25

    Default

    xiexueze,

    Thanks! I wish I could find that thread which could saved my effort . I tried with your new files as well but with this one does not remove the paging toolbar after taking out the mouse.
    With ext 2.2 when you hover your mouse then only you see the paging tree toolbar otherwise not.

  6. #26

    Default

    yes, cause I think the user would might ignore the paging toolbar when hide the toolbar.
    but if you want ,you can just change the method onMouseOver like this:
    HTML Code:
    	onMouseOver : function(node){
    		var ptb = node.attributes.ptb;
    		if(node.isLeaf() || !node.isLoaded() || !ptb){
    			if(this.ptb){
    				this.ptb.hide();
    			}
    			return;
    		}
    		if(this.ptb !== ptb){
    			if(this.ptb){
    				this.ptb.hide();
    			}
    			this.ptb = ptb;
    		}
    		this.ptb.show();
    	},

  7. #27

    Default

    Thanks xiexueze,

    One more thing now we need to hover the mouse over the node only then toolbar appears.
    Previously even if hover the mouse anywhere in area by the side of node then also toolbar use to appear.

    I need this for other feature e.g. click etc which is i think got overridden by this pagingtoolbar. vbmenu_register("postmenu_322862", true);

  8. #28

    Default

    great work!thanks to you!
    but when there is a node newly added without leaf:true/false configured an error might occured,which says:property or method not supported

  9. #29
    Ext User
    Join Date
    Feb 2009
    Location
    Tehran
    Posts
    2

    Default

    Hi,
    I tested your nice code but it`s contain small bugs, therefore I decided to review your code and make it more efficient with less bugs and more flexibility.
    I hope your enjoy
    Code:
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Ext.ns("Ext.ux.tree");
    
    Ext.ux.tree.PagingTreeLoader = function(config) {
        
        this.pagingModel = config.pagingModel || "local";
        this.pageSize = config.pageSize || 20;
        this.ptb = false;
        this.ptbConfig = {enableTextPaging:config.enableTextPaging,hideMode:'visibility1'};
        
        Ext.ux.tree.PagingTreeLoader.superclass.constructor.apply(this, arguments);
    };
    
    Ext.extend(Ext.ux.tree.PagingTreeLoader, Ext.tree.TreeLoader, {
        doPreload : function(node){
            var pi = node.attributes.pagingInfo;
            if(pi == undefined){
                node.attributes.pagingInfo = pi = {limit: this.pageSize,start: 0};
            }
            if(this.pagingModel == "local"){
                var children = node.attributes.children;
                if(children){
                    var limit = pi.limit;
                    var start = pi.start;
                    var total = pi.total = children.length;
                    
                    node.beginUpdate();
                    for(var len = (start + limit); start < len && start < total; start++){
                        var cn = node.appendChild(this.createNode(children[start]));
                        if(this.preloadChildren){
                            this.doPreload(cn);
                        }
                    }
                    node.endUpdate();
                    
                    if(limit < total){
                        this.createToolbar(node);
                    }
                    
                    return true;
                }
            }
            
            Ext.apply(this.baseParams,pi);
    
            return false;
        },
            
        processResponse : function(response, node, callback){
            var json = response.responseText;
            try {
                var o = eval("("+json+")");
                var pi = node.attributes.pagingInfo;
                if(this.isArray(o)){
                    pi.total = o.length;
                }else{
                    pi.total = o.total || o.nodes.length;
                    o = o.nodes;
                }
                if(this.pagingModel == 'local'){
                    node.attributes.children = o;
                }
                node.beginUpdate();
                for(var i = 0, len = o.length; i < len && i < pi.limit; i++){
                    var cn = this.createNode(o[i]);
                    if(cn){
                        cn = node.appendChild(cn);
                    }
                }
                node.endUpdate();
    
                if(pi.limit < pi.total){
                    this.createToolbar(node);
                }
                
                if(typeof callback == "function"){
                    callback(this, node);
                }
            }catch(e){
                this.handleFailure(response);
            }
        },
    
        isArray : function(v){
            return v && typeof v.length == 'number' && typeof v.splice == 'function';
        },
        
        handleResponse : function(response){
            this.transId = false;
            var arg = response.argument;
            this.processResponse(response, arg.node, arg.callback);
            this.fireEvent("load", this, arg.node, response);
    
            this.addMouseOverEvent(arg.node);            
        },
    
        addMouseOverEvent : function(node){
            var tree = node.ownerTree;
            if(!tree.hasListener('mouseover')){
                tree.on('mouseover',this.onMouseOver,this);
            }
        },
        
        onMouseOver : function(node){
            if(node.isLeaf() || !node.isLoaded()){
                return;
            }
            var ptb = node.attributes.ptb;
            if(ptb){
                if(this.ptb !== ptb){
                    if(this.ptb)
                        this.ptb.hide();
                    this.ptb = ptb;
                }
                ptb.show();
            }
        },
        
        
        createToolbar : function(node){
            var ptb = node.attributes.ptb;
            var tree = node.ownerTree;
            
            if(this.ptb !== ptb){
                if(this.ptb){
                    this.ptb.hide();
                }
                var showTop = (!tree.rootVisible && node.isRoot);
                if(ptb == undefined){
                    node.attributes.ptb = ptb = new Ext.ux.tree.PagingTreeToolbar(this.ptbConfig);
                    
                    var el = node.getUI().getEl();
                    if(!showTop){
                        el = Ext.get(el.firstChild);
                        if(Ext.isIE){
                            el.addClass('x-tree-paging-nowrap');
                            el = Ext.DomHelper.append(el,{tag:'div',cls:'x-tree-paging-inline'},true);
                        }else{
                            el.addClass('x-tree-paging-float');
                            el = Ext.DomHelper.insertAfter(el,{tag:'div',cls:'x-tree-paging-inline'},true);
                        }
                    }
                    ptb.render(el);
                }
                this.ptb = showTop ? this.ptb : ptb;
            }
            ptb.setTreeNode(node);
        }
    
    });
    
    Ext.ux.tree.TreeNodeMouseoverPlugin = Ext.extend(Object, {
        init: function(tree) {
            if (!tree.rendered) {
                tree.on('render', function() {this.init(tree)}, this);
            }else{
                this.tree = tree;
                tree.body.on('mouseover', this.onTreeMouseover, this, {delegate: 'div.x-tree-node-el'});
            }
        },
        onTreeMouseover: function(e, t) {
            var nodeEl = Ext.fly(t);
            if (nodeEl) {
                var nodeId = nodeEl.getAttributeNS('ext', 'tree-node-id');
                if (nodeId) {
                    this.tree.fireEvent('mouseover', this.tree.getNodeById(nodeId), e);
                }
            }
        }
    });
    
    
    Ext.ux.tree.PagingTreeToolbar = Ext.extend(Ext.Toolbar, {
    
        firstText : Ext.PagingToolbar.prototype.firstText,
        prevText : Ext.PagingToolbar.prototype.prevText,
        nextText : Ext.PagingToolbar.prototype.nextText,
        lastText : Ext.PagingToolbar.prototype.lastText,
        afterPageText : "<font size=2> / {0}</font>",
        
        autoCreate: {
            cls:'x-tree-paging-toolbar x-small-editor x-tree-paging-inline',
            style:'vertical-align:middle',
            html:'<table cellspacing="0"><tr></tr></table>'
        },
        
        // private
        onRender : function(ct, position){
            this.height = Ext.isIE ? 10 : 18;
            this.width = 50;
            Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
            
            this.first = this.addButton({
                tooltip: this.firstText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-first",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["first"])
            });
            this.prev = this.addButton({
                tooltip: this.prevText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-prev",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["prev"])
            });
            if(this.enableTextPaging == true){
                this.addText('&nbsp;');
                this.field = new Ext.form.TextField({
                    enableKeyEvents:true,
                    selectOnFocus : true,
                    cls: "x-tbar-page-number"
                })
                this.add(this.field);
                this.addText('&nbsp');
                this.field.on("keydown", this.onPagingKeydown, this);
                this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
            };
            this.next = this.addButton({
                tooltip: this.nextText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-next",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["next"])
            });
            this.last = this.addButton({
                tooltip: this.lastText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-last",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["last"])
            });
            if(true){
                this.addText('&nbsp;&nbsp;<span style="font-size:10">Search:</span>');
                this.fieldSearch = new Ext.form.TextField({
                    enableKeyEvents:true,
                    width:90
                })
                this.fieldSearch.on("keydown", 
                    function(t, e)
                    {
                        if (e.getKey() == e.RETURN) 
                        {
                            e.stopEvent();
                            this.pi.query = t.getValue();
                            this.treeNode.reload();
                        }
                    }
                , this);
                this.add(this.fieldSearch);
            };
    
        },
        
        // private
        onClick : function(which){
            switch(which){
                case "first":
                    this.pi.start = 0;
                break;
                case "prev":
                    this.pi.start = Math.max(0, this.pi.start-this.pi.limit);
                break;
                case "next":
                    this.pi.start = this.pi.start+this.pi.limit;
                break;
                case "last":
                    var total = this.pi.total;
                    var extra = total % this.pi.limit;
                    var lastStart = extra ? (total - extra) : (total-this.pi.limit);
                    this.pi.start = lastStart;
                break;
            }
            this.updateField();
            this.treeNode.reload();
        },
    
        // private
        updateField : function(){
            if(this.enableTextPaging === true){
                var d = this.getPageData(), ap = d.activePage, ps = d.pages;
                this.afterTextEl.setText(String.format(this.afterPageText, d.pages));
                this.field.setValue(ap);
            }
    
        },
    
        // private
        onPagingKeydown : function(t, e){
            
            var k = e.getKey(), d = this.getPageData(), pageNum;
            if (k == e.RETURN) {
                e.stopEvent();
                pageNum = this.readPage(d);
                if(pageNum !== false){
                    pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
                    this.pi.start = pageNum * this.pi.limit;
                    this.treeNode.reload();
                }
            }else if (k == e.HOME || k == e.END){
                e.stopEvent();
                pageNum = k == e.HOME ? 1 : d.pages;
                this.field.setValue(pageNum);
            }else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
                e.stopEvent();
                if(pageNum = this.readPage(d)){
                    var increment = e.shiftKey ? 10 : 1;
                    if(k == e.DOWN || k == e.PAGEDOWN){
                        increment *= -1;
                    }
                    pageNum += increment;
                    if(pageNum >= 1 & pageNum <= d.pages){
                        this.field.setValue(pageNum);
                    }
                }
            }
        },
    
        // private
        readPage : function(d){
            var v = this.field.getValue(), pageNum;
            if (!v || isNaN(pageNum = parseInt(v, 10))) {
                this.field.dom.value = d.activePage;
                return false;
            }
            return pageNum;
        },
    
        // private
        getPageData : function(){
            var pi = this.pi;
            var total = pi.total;
            return {
                total : total,
                activePage : Math.ceil((pi.start+pi.limit)/pi.limit),
                pages :  total < pi.limit ? 1 : Math.ceil(total/pi.limit)
            };
        },
    
        // private
        resetToolBar : function(){
            var fp = this.pi.start == 0;
            var nl = (this.pi.start + this.pi.limit) >= this.pi.total;
    
            this.first.setDisabled(fp);
            this.prev.setDisabled(fp);
            this.next.setDisabled(nl);
            this.last.setDisabled(nl);
            
            this.updateField();
        },
    
        setTreeNode : function(node){
            this.treeNode = node;
            this.pi = this.treeNode.attributes.pagingInfo;
    
            this.resetToolBar();
        }
    });

  10. #30

    Default

    Quote Originally Posted by navaro_81 View Post
    Hi,
    I tested your nice code but it`s contain small bugs, therefore I decided to review your code and make it more efficient with less bugs and more flexibility.
    I hope your enjoy
    Code:
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Ext.ns("Ext.ux.tree");
    
    Ext.ux.tree.PagingTreeLoader = function(config) {
        
        this.pagingModel = config.pagingModel || "local";
        this.pageSize = config.pageSize || 20;
        this.ptb = false;
        this.ptbConfig = {enableTextPaging:config.enableTextPaging,hideMode:'visibility1'};
        
        Ext.ux.tree.PagingTreeLoader.superclass.constructor.apply(this, arguments);
    };
    
    Ext.extend(Ext.ux.tree.PagingTreeLoader, Ext.tree.TreeLoader, {
        doPreload : function(node){
            var pi = node.attributes.pagingInfo;
            if(pi == undefined){
                node.attributes.pagingInfo = pi = {limit: this.pageSize,start: 0};
            }
            if(this.pagingModel == "local"){
                var children = node.attributes.children;
                if(children){
                    var limit = pi.limit;
                    var start = pi.start;
                    var total = pi.total = children.length;
                    
                    node.beginUpdate();
                    for(var len = (start + limit); start < len && start < total; start++){
                        var cn = node.appendChild(this.createNode(children[start]));
                        if(this.preloadChildren){
                            this.doPreload(cn);
                        }
                    }
                    node.endUpdate();
                    
                    if(limit < total){
                        this.createToolbar(node);
                    }
                    
                    return true;
                }
            }
            
            Ext.apply(this.baseParams,pi);
    
            return false;
        },
            
        processResponse : function(response, node, callback){
            var json = response.responseText;
            try {
                var o = eval("("+json+")");
                var pi = node.attributes.pagingInfo;
                if(this.isArray(o)){
                    pi.total = o.length;
                }else{
                    pi.total = o.total || o.nodes.length;
                    o = o.nodes;
                }
                if(this.pagingModel == 'local'){
                    node.attributes.children = o;
                }
                node.beginUpdate();
                for(var i = 0, len = o.length; i < len && i < pi.limit; i++){
                    var cn = this.createNode(o[i]);
                    if(cn){
                        cn = node.appendChild(cn);
                    }
                }
                node.endUpdate();
    
                if(pi.limit < pi.total){
                    this.createToolbar(node);
                }
                
                if(typeof callback == "function"){
                    callback(this, node);
                }
            }catch(e){
                this.handleFailure(response);
            }
        },
    
        isArray : function(v){
            return v && typeof v.length == 'number' && typeof v.splice == 'function';
        },
        
        handleResponse : function(response){
            this.transId = false;
            var arg = response.argument;
            this.processResponse(response, arg.node, arg.callback);
            this.fireEvent("load", this, arg.node, response);
    
            this.addMouseOverEvent(arg.node);            
        },
    
        addMouseOverEvent : function(node){
            var tree = node.ownerTree;
            if(!tree.hasListener('mouseover')){
                tree.on('mouseover',this.onMouseOver,this);
            }
        },
        
        onMouseOver : function(node){
            if(node.isLeaf() || !node.isLoaded()){
                return;
            }
            var ptb = node.attributes.ptb;
            if(ptb){
                if(this.ptb !== ptb){
                    if(this.ptb)
                        this.ptb.hide();
                    this.ptb = ptb;
                }
                ptb.show();
            }
        },
        
        
        createToolbar : function(node){
            var ptb = node.attributes.ptb;
            var tree = node.ownerTree;
            
            if(this.ptb !== ptb){
                if(this.ptb){
                    this.ptb.hide();
                }
                var showTop = (!tree.rootVisible && node.isRoot);
                if(ptb == undefined){
                    node.attributes.ptb = ptb = new Ext.ux.tree.PagingTreeToolbar(this.ptbConfig);
                    
                    var el = node.getUI().getEl();
                    if(!showTop){
                        el = Ext.get(el.firstChild);
                        if(Ext.isIE){
                            el.addClass('x-tree-paging-nowrap');
                            el = Ext.DomHelper.append(el,{tag:'div',cls:'x-tree-paging-inline'},true);
                        }else{
                            el.addClass('x-tree-paging-float');
                            el = Ext.DomHelper.insertAfter(el,{tag:'div',cls:'x-tree-paging-inline'},true);
                        }
                    }
                    ptb.render(el);
                }
                this.ptb = showTop ? this.ptb : ptb;
            }
            ptb.setTreeNode(node);
        }
    
    });
    
    Ext.ux.tree.TreeNodeMouseoverPlugin = Ext.extend(Object, {
        init: function(tree) {
            if (!tree.rendered) {
                tree.on('render', function() {this.init(tree)}, this);
            }else{
                this.tree = tree;
                tree.body.on('mouseover', this.onTreeMouseover, this, {delegate: 'div.x-tree-node-el'});
            }
        },
        onTreeMouseover: function(e, t) {
            var nodeEl = Ext.fly(t);
            if (nodeEl) {
                var nodeId = nodeEl.getAttributeNS('ext', 'tree-node-id');
                if (nodeId) {
                    this.tree.fireEvent('mouseover', this.tree.getNodeById(nodeId), e);
                }
            }
        }
    });
    
    
    Ext.ux.tree.PagingTreeToolbar = Ext.extend(Ext.Toolbar, {
    
        firstText : Ext.PagingToolbar.prototype.firstText,
        prevText : Ext.PagingToolbar.prototype.prevText,
        nextText : Ext.PagingToolbar.prototype.nextText,
        lastText : Ext.PagingToolbar.prototype.lastText,
        afterPageText : "<font size=2> / {0}</font>",
        
        autoCreate: {
            cls:'x-tree-paging-toolbar x-small-editor x-tree-paging-inline',
            style:'vertical-align:middle',
            html:'<table cellspacing="0"><tr></tr></table>'
        },
        
        // private
        onRender : function(ct, position){
            this.height = Ext.isIE ? 10 : 18;
            this.width = 50;
            Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
            
            this.first = this.addButton({
                tooltip: this.firstText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-first",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["first"])
            });
            this.prev = this.addButton({
                tooltip: this.prevText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-prev",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["prev"])
            });
            if(this.enableTextPaging == true){
                this.addText('&nbsp;');
                this.field = new Ext.form.TextField({
                    enableKeyEvents:true,
                    selectOnFocus : true,
                    cls: "x-tbar-page-number"
                })
                this.add(this.field);
                this.addText('&nbsp');
                this.field.on("keydown", this.onPagingKeydown, this);
                this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
            };
            this.next = this.addButton({
                tooltip: this.nextText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-next",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["next"])
            });
            this.last = this.addButton({
                tooltip: this.lastText,
                cls:"x-tree-paging-btn-icon",
                iconCls: "x-tbar-page-last",
                disabled: true,
                handler: this.onClick.createDelegate(this, ["last"])
            });
            if(true){
                this.addText('&nbsp;&nbsp;<span style="font-size:10">Search:</span>');
                this.fieldSearch = new Ext.form.TextField({
                    enableKeyEvents:true,
                    width:90
                })
                this.fieldSearch.on("keydown", 
                    function(t, e)
                    {
                        if (e.getKey() == e.RETURN) 
                        {
                            e.stopEvent();
                            this.pi.query = t.getValue();
                            this.treeNode.reload();
                        }
                    }
                , this);
                this.add(this.fieldSearch);
            };
    
        },
        
        // private
        onClick : function(which){
            switch(which){
                case "first":
                    this.pi.start = 0;
                break;
                case "prev":
                    this.pi.start = Math.max(0, this.pi.start-this.pi.limit);
                break;
                case "next":
                    this.pi.start = this.pi.start+this.pi.limit;
                break;
                case "last":
                    var total = this.pi.total;
                    var extra = total % this.pi.limit;
                    var lastStart = extra ? (total - extra) : (total-this.pi.limit);
                    this.pi.start = lastStart;
                break;
            }
            this.updateField();
            this.treeNode.reload();
        },
    
        // private
        updateField : function(){
            if(this.enableTextPaging === true){
                var d = this.getPageData(), ap = d.activePage, ps = d.pages;
                this.afterTextEl.setText(String.format(this.afterPageText, d.pages));
                this.field.setValue(ap);
            }
    
        },
    
        // private
        onPagingKeydown : function(t, e){
            
            var k = e.getKey(), d = this.getPageData(), pageNum;
            if (k == e.RETURN) {
                e.stopEvent();
                pageNum = this.readPage(d);
                if(pageNum !== false){
                    pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
                    this.pi.start = pageNum * this.pi.limit;
                    this.treeNode.reload();
                }
            }else if (k == e.HOME || k == e.END){
                e.stopEvent();
                pageNum = k == e.HOME ? 1 : d.pages;
                this.field.setValue(pageNum);
            }else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
                e.stopEvent();
                if(pageNum = this.readPage(d)){
                    var increment = e.shiftKey ? 10 : 1;
                    if(k == e.DOWN || k == e.PAGEDOWN){
                        increment *= -1;
                    }
                    pageNum += increment;
                    if(pageNum >= 1 & pageNum <= d.pages){
                        this.field.setValue(pageNum);
                    }
                }
            }
        },
    
        // private
        readPage : function(d){
            var v = this.field.getValue(), pageNum;
            if (!v || isNaN(pageNum = parseInt(v, 10))) {
                this.field.dom.value = d.activePage;
                return false;
            }
            return pageNum;
        },
    
        // private
        getPageData : function(){
            var pi = this.pi;
            var total = pi.total;
            return {
                total : total,
                activePage : Math.ceil((pi.start+pi.limit)/pi.limit),
                pages :  total < pi.limit ? 1 : Math.ceil(total/pi.limit)
            };
        },
    
        // private
        resetToolBar : function(){
            var fp = this.pi.start == 0;
            var nl = (this.pi.start + this.pi.limit) >= this.pi.total;
    
            this.first.setDisabled(fp);
            this.prev.setDisabled(fp);
            this.next.setDisabled(nl);
            this.last.setDisabled(nl);
            
            this.updateField();
        },
    
        setTreeNode : function(node){
            this.treeNode = node;
            this.pi = this.treeNode.attributes.pagingInfo;
    
            this.resetToolBar();
        }
    });

    hi navaro_81 ,

    your code is really nice. There is a small thing that i found, will make your code perfect.

    Please follow below steps to recreate the issue. (for make it easy just consider max items per page is 10)
    1. Expand root node which contain more than 10 child nodes (paging tool bar appeared on root node )
    2. Expand a child node (let's say childA) which contain more that 10 child nodes (another paging toolbar appeared on child node)
    3. Click next/prev button on root paging toolbar and again expand the same child node ( childA)
    4.This time paging toolbar is not appearing on child node (childA)

    I'm grateful to you if you can solve that problem and make the code correct.

    Thank you in advance.

    Chathuranga.



Page 3 of 3 FirstFirst 123

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •