Forum

November 2nd, 2014
A A A
Avatar

Lost password?
Advanced Search

— Forum Scope —




— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

The forums are currently locked and only available for read only access
sp_Feed Topic RSS sp_TopicIcon
SelectionStorage
14/02/2011
15:45
Avatar
omega2k
Ulm
New Member
Members
Forum Posts: 1
Member Since:
14/02/2011
sp_UserOfflineSmall Offline

Hi Tony,

great work so far... but could you integrate a storage function for the grid-selection? what do you think?

My intention was the problem getting all selected rows eg. for editing or mass-delete... but on paging, sorting or with a live-grid, the selection gets lost! I wrote a small plugin to solve this, but it's "wasting" some events...

/**

* keeps selection on paging and sorting

*

* @author Patrick Kracht

*/

//This prototype is provided by the Mozilla foundation and

//is distributed under the MIT license.

//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.indexOf)

{

Array.prototype.indexOf = function(elt /*, from*/)

{

var len = this.length;

var from = Number(arguments[1]) || 0;

from = (from < 0)

? Math.ceil(from)

: Math.floor(from);

if (from < 0)

from += len;

for (; from < len; from++)

{

if (from in this &&

this[from] === elt)

return from;

}

return -1;

};

}

;(function($)

{

var _stored = [];

var _active = [];

function _addDiff(grid,data_old,data_new)

{

var id = grid.attr('id');

for (var i = 0; i < data_new.length; i++)

{

//neuer Wert

var val = data_new[i];

//wenn im alten Array der neue Wert nicht vorkommt und noch nicht gespeichert

if ( data_old.indexOf(val) < 0 && _stored[id].indexOf(val) < 0 && val.length != 0 )

{

//ID adden

_stored[id].push(val);

}

}

};

function _delDiff(grid,data_old,data_new)

{

var id = grid.attr('id');

for (var i = 0; i < data_old.length; i++)

{

//Position des alten Werts im Speicher suchen

var pos = _stored[id].indexOf(data_old[i]);

//wenn in aktueller Auswahl nicht mehr und noch im Speicher

if ( data_new.indexOf(data_old[i]) < 0 && pos >= 0 )

{

//Element löschen

_stored[id].splice(pos, 1);

}

}

};

function _reSelect(grid)

{

var id = grid.attr('id');

//Selektion zurücksetzen

grid.jqGrid('resetSelection');

//neue Haken setzen

for (var i = 0; i < _stored[id].length; i++)

{

//Haken setzen

grid.jqGrid('setSelection',_stored[id][i]);

}

//aktuelle Selektion = aktive Selektion

_active[id] = new String( grid.getGridParam('selarrrow') ).split(',');

};

function fn_add(grid,data)

{

//Speicher beschreiben

_addDiff(grid,[],data);

//Selektion zurücksetzen

_reSelect(grid);

};

function fn_set(grid,data)

{

//Speicher beschreiben

_stored[grid.attr('id')] = new String(data).split(',');

//Selektion zurücksetzen

_reSelect(grid);

};

function fn_del(grid,data)

{

var id = grid.attr('id');

//zuerst aktuelle Selektion speichern

fn_save(grid);

//komplett ToString wandeln

data = new String(data).split(',');

//suchen, welche Zeile entfernt worden sind

for (var i = 0; i < data.length; i++)

{

//suchen, ob sich die ID im Speicher befindet

var pos = _stored[id].indexOf(data[i]);

//wenn ID vorhanden

if ( pos >= 0 )

{

//Position des entfernten Elements im Speicher löschen

_stored[id].splice(pos, 1);

}

}

//Selektion zurücksetzen

_reSelect(grid);

};

function fn_clear(grid)

{

var id = grid.attr('id');

//aktuelle und gespeicherte Selektion löschen

_active[id] = [];

_stored[id] = [];

//Grid zurücksetzen und Selektion löschen

grid.setGridParam({selarrrow:[],page:1});

grid.jqGrid('resetSelection').trigger('reloadGrid');

};

function fn_get(grid)

{

fn_save(grid);

return _stored[grid.attr('id')];

};

function fn_save(grid)

{

//aktuelle Selektion merken

var current = new String( grid.getGridParam('selarrrow') ).split(',');

var id = grid.attr('id');

//Änderungen übernehmen, seit dem letzten Laden

_addDiff(grid,_active[id],current);

_delDiff(grid,_active[id],current);

//aktive Selektion = neue Selektion

_active[id] = current;

};

function fn_load(grid)

{

var id = grid.attr('id');

//nur wenn etwas gespeichert wurde, Selektion herstellen

if( typeof(_stored[id]) == 'object' )

{

$.each(_stored[id], function(index,id)

{

grid.jqGrid('setSelection',id);

});

}

//aktive Selektion auf der aktuellen Seite merken

_active[id] = new String( grid.getGridParam('selarrrow') ).split(',');

};

$.fn.jqGridSelectionStorage = function(action,data)

{

//Objekt und ID des Grids holen

var ret = [];

var o = $(this);

var id = o.attr('id');

//macht nur Sinn bei MultiSelect

if ( !o.getGridParam('multiselect') ) return false;

//wenn noch keine Selektion gespeichert, leeres Objekt erstellen

if( typeof( _stored[id] ) == 'undefined' )

{

_stored[id] = [];

_active[id] = [];

}

//Aktion wählen

switch( action )

{

case 'get': ret = fn_get(o); break;

case 'set': fn_set(o,data); break;

case 'add': fn_add(o,data); break;

case 'del': fn_del(o,data); break;

case 'save': fn_save(o); break;

case 'load': fn_load(o); break;

case 'clear': fn_clear(o); break;

default: alert('jqGridSelectionStorage(\''+action+'\') not defined!'); break;

}

return ret;

};

})(jQuery);

/**
 * Behält die Selektion im Grid beim Seitenwechsel
 *
 * @author Patrick Kracht
 */

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

;(function($)
{
    var _stored = [];
    var _active = [];
    
    function _addDiff(grid,data_old,data_new)
    {
        var id = grid.attr('id');
        for (var i = 0; i < data_new.length; i++)
        {
            //neuer Wert
            var val = data_new[i];
            
            //wenn im alten Array der neue Wert nicht vorkommt und noch nicht gespeichert
            if ( data_old.indexOf(val) < 0 && _stored[id].indexOf(val) < 0 && val.length != 0 )
            {
                //ID adden
                _stored[id].push(val);
            }
        }
    };
    
    function _delDiff(grid,data_old,data_new)
    {
        var id = grid.attr('id');
        for (var i = 0; i < data_old.length; i++)
        {
            //Position des alten Werts im Speicher suchen
            var pos = _stored[id].indexOf(data_old[i]);
            
            //wenn in aktueller Auswahl nicht mehr und noch im Speicher
            if ( data_new.indexOf(data_old[i]) < 0 && pos >= 0 )
            {
                //Element löschen
                _stored[id].splice(pos, 1);
            }
        }
    };
    
    function _reSelect(grid)
    {
        var id = grid.attr('id');
        
        //Selektion zurücksetzen
        grid.jqGrid('resetSelection');
        
        //neue Haken setzen
        for (var i = 0; i < _stored[id].length; i++)
        {
            //Haken setzen
            grid.jqGrid('setSelection',_stored[id][i]);
        }
        
        //aktuelle Selektion = aktive Selektion
        _active[id] = new String( grid.getGridParam('selarrrow') ).split(',');
    };
    
    function fn_add(grid,data)
    {
        //Speicher beschreiben
        _addDiff(grid,[],data);
        
        //Selektion zurücksetzen
        _reSelect(grid);
    };
    
    function fn_set(grid,data)
    {
        //Speicher beschreiben
        _stored[grid.attr('id')] = new String(data).split(',');
        
        //Selektion zurücksetzen
        _reSelect(grid);
    };
    
    function fn_del(grid,data)
    {
        var id = grid.attr('id');
        
        //zuerst aktuelle Selektion speichern
        fn_save(grid);
        
        //komplett ToString wandeln
        data = new String(data).split(',');
        
        //suchen, welche Zeile entfernt worden sind
        for (var i = 0; i < data.length; i++)
        {
            //suchen, ob sich die ID im Speicher befindet
            var pos = _stored[id].indexOf(data[i]);
            
            //wenn ID vorhanden
            if ( pos >= 0 )
            {
                //Position des entfernten Elements im Speicher löschen
                _stored[id].splice(pos, 1);
            }
        }
        
        //Selektion zurücksetzen
        _reSelect(grid);
    };
    
    function fn_clear(grid)
    {
        var id = grid.attr('id');
        
        //aktuelle und gespeicherte Selektion löschen
        _active[id] = [];
        _stored[id] = [];
        
        //Grid zurücksetzen und Selektion löschen
        grid.setGridParam({selarrrow:[],page:1});
        grid.jqGrid('resetSelection').trigger('reloadGrid');
    };
    
    function fn_get(grid)
    {
        fn_save(grid);
        return _stored[grid.attr('id')];
    };
    
    function fn_save(grid)
    {
        //aktuelle Selektion merken
        var current = new String( grid.getGridParam('selarrrow') ).split(',');
        var id = grid.attr('id');
        
        //Änderungen übernehmen, seit dem letzten Laden
        _addDiff(grid,_active[id],current);
        _delDiff(grid,_active[id],current);
        
        //aktive Selektion = neue Selektion
        _active[id] = current;
    };
    
    function fn_load(grid)
    {
        var id = grid.attr('id');
        
        //nur wenn etwas gespeichert wurde, Selektion herstellen
        if( typeof(_stored[id]) == 'object' )
        {
            $.each(_stored[id], function(index,id)
            {
                grid.jqGrid('setSelection',id);
            });
        }
        
        //aktive Selektion auf der aktuellen Seite merken
        _active[id] = new String( grid.getGridParam('selarrrow') ).split(',');
    };
    
    $.fn.jqGridSelectionStorage = function(action,data)
    {
        //Objekt und ID des Grids holen
        var ret = [];
        var o   = $(this);
        var id  = o.attr('id');
        
        //macht nur Sinn bei MultiSelect
        if ( !o.getGridParam('multiselect') ) return false;
        
        //wenn noch keine Selektion gespeichert, leeres Objekt erstellen
        if( typeof( _stored[id] ) == 'undefined' )
        {
            _stored[id] = [];
            _active[id] = [];
        }
        
        //Aktion wählen
        switch( action )
        {
            case 'get':        ret = fn_get(o);    break;
            case 'set':        fn_set(o,data);        break;
            case 'add':        fn_add(o,data);        break;
            case 'del':        fn_del(o,data);        break;
            case 'save':    fn_save(o);            break;
            case 'load':    fn_load(o);         break;
            case 'clear':    fn_clear(o);         break;
            default: alert('jqGridSelectionStorage(\''+action+'\') not defined!'); break;
        }
        
        return ret;
    };
    
})(jQuery);

Forum Timezone: Europe/Sofia

Most Users Ever Online: 715

Currently Online:
65 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

OlegK: 1255

markw65: 179

kobruleht: 144

phicarre: 132

YamilBracho: 124

Renso: 118

Member Stats:

Guest Posters: 447

Members: 11373

Moderators: 2

Admins: 1

Forum Stats:

Groups: 1

Forums: 8

Topics: 10592

Posts: 31289

Newest Members:

, razia, Prankie, psky, praveen neelam, greg.valainis@pa-tech.com

Moderators: tony: 7721, Rumen[Trirand]: 81

Administrators: admin: 66

Comments are closed.
Privacy Policy   Terms and Conditions   Contact Information