Pro version . Grid v.3.0 build 110713.
I can’t to use info from cookies ( restoring column orders, widths and etc ) , because users are migrating in enterprise and storing of cookies isn’t reliable . Also client want to use a module for users rights ( editable or not , visible or not and etc … ). So I did own table and ( MySql ) in which are data - user id, form/grid id, field id, order num, width, visibillity, rights .
- I’m formatting settings for grid from own array :
var grd = new Array();
grd[ 0 ] = [];
grd[ 0 ].push( "uzsak" ); // field/column id
grd[ 0 ].push( "ro" ); // column type
grd[ 0 ].push( "150" ); // width at the first time
grd[ 0 ].push( "#connector_text_filter" ); // filter type
grd[ 0 ].push( "left" ); // align
grd[ 0 ].push( "str" ); // sorting type
grd[ 0 ].push( "Uzsak.ID" ); // header in lithuanian
grd[ 0 ].push( "Order.ID" ); // header in english ...
grd[ 1 ] = [];
grd[ 1 ].push( "telkinys" );
grd[ 1 ].push( "ed" );
grd[ 1 ].push( "80" );
grd[ 1 ].push( "#connector_select_filter" );// push( "#select_filter" );
grd[ 1 ].push( "left" );
grd[ 1 ].push( "str" );
grd[ 1 ].push( "Telkinys" );
grd[ 1 ].push( "Pool" );
...
grd[ 8 ] = [];
grd[ 8 ].push( "uzs_data" );
grd[ 8 ].push( "dhxCalendar" );
grd[ 8 ].push( "100" );
grd[ 8 ].push( "#connector_select_filter" );// push( "#select_filter" );
grd[ 8 ].push( "center" );
grd[ 8 ].push( "date" );
grd[ 8 ].push( "Uzs.data" );
grd[ 8 ].push( "Ord.date" );
grd[ 9 ] = [];
grd[ 9 ].push( "uzs_sav" );
grd[ 9 ].push( "ro" );
grd[ 9 ].push( "75" );
grd[ 9 ].push( "#connector_select_filter" );// push( "#select_filter" );
grd[ 9 ].push( "center" );
grd[ 9 ].push( "str" );
grd[ 9 ].push( "Uzs.sav." );
grd[ 9 ].push( "Ord.week" );
- Needfuls vars for grid init …
var hdr = ""; // headers
var flt = ""; // filters
var lyg = ""; // aligns
var plc = ""; // widths
var ctp = ""; // column types
var srt = ""; // sortings ...
var vsb = ""; // visbillity
var kbl = "";
var klb = ( $app_lng == "lt" ? 6 : 7 ); // which label - lithuanian or english ..
var slc_fld = ""; // columns identifiers and column order ...
var dgr = new Array();
grid_rst( false ); // false for the first time , true for - reload grid ...
var mygrid = tabbar.cells( tabbar.getActiveTab() ).attachGrid();
mygrid.setImagePath( "codebase/imgs/" );
mygrid.setSkin( "dhx_skyblue" );
mygrid.setColumnIds( [b]slc_fld[/b] )
mygrid.setHeader( hdr );
mygrid.attachHeader( flt );
mygrid.setColTypes( ctp );
mygrid.setInitWidths( plc )
mygrid.setColAlign( lyg )
mygrid.setColSorting( srt );
mygrid.setDateFormat( "%Y.%m.%d" );
mygrid.setColumnsVisibility( vsb );
mygrid.enableSmartRendering( true, 200 );
mygrid.init();
mygrid.load( "uzs1.php?lauku_eile=" + [b]slc_fld[/b] );
myDp = new dataProcessor( "uzs1.php?lauku_eile=" + [b]slc_fld [/b]);
myDp.init( mygrid );
...
- function grid_rst( perkr )
function grid_rst( perkr )
{
dgr.length = 0;
hdr = "";
flt = "";
lyg = "";
plc = "";
ctp = "";
srt = "";
vsb = "";
kbl = "";
[b]slc_fld[/b] = "";
var wd = 0;
var rd = 0;
var clt = "";
if ( perkr == true ) // if reload grid - save grid state and return new state
dgr = grid_save( mygrid, 'uzsakym' );
if ( perkr == false ) // sets for the first time ...
dgr = grid_array( "uzsakym" );
/* dgr - array with infor of user sets :
column id, column order, width, visibillity, editable or not;
*/
if ( dgr.length == 0 ) // use default sets form grd array ...
{
l = grd.length;
for ( u = 0; u < l; u ++ )
{
kbl = ( u < l - 1 ? "," : "" );
[b]slc_fld[/b] += grd[ u ][ 0 ] + kbl;
ctp += grd[ u ][ 1 ] + kbl;
plc += grd[ u ][ 2 ] + kbl;
flt += grd[ u ][ 3 ] + kbl;
lyg += grd[ u ][ 4 ] + kbl;
srt += grd[ u ][ 5 ] + kbl;
hdr += grd[ u ][ klb ] + kbl;
vsb += "false" + kbl;
}
}
else
{
l = dgr.length;
l2 = grd.length;
for ( u = 0; u < l; u ++ )
{
kbl = ( u < l - 1 ? "," : "" );
for ( z = 0; z < l2; z ++ )
{
if ( dgr[ u ][ 0 ] == grd[ z ][ 0 ] )
{
wd = dgr[ u ][ 2 ]; // widths from user set
rd = dgr[ u ][ 4 ]; // ro or ed from user set
[b]slc_fld[/b] += grd[ z ][ 0 ] + kbl;
if ( rd == 0 && clt.indexOf( "ro" ) == 0 )
ctp += "ro" + kbl;
else
ctp += clt + kbl;
plc += wd.toString() + kbl;
flt += grd[ z ][ 3 ] + kbl;
lyg += grd[ z ][ 4 ] + kbl;
srt += grd[ z ][ 5 ] + kbl;
hdr += grd[ z ][ klb ] + kbl;
vsb += ( dgr[ u ][ 3 ] == 0 ? "false" : "true" ) + kbl;
}
}
}
}
if ( perkr == true ) // reloading grid
{
mygrid.clearAll( true );
mygrid.setColumnIds( [b]slc_fld[/b] )
mygrid.setHeader( hdr );
mygrid.attachHeader( flt );
mygrid.setColTypes( ctp );
mygrid.setInitWidths( plc )
mygrid.setColAlign( lyg )
mygrid.setColSorting( srt );
mygrid.setDateFormat( "%Y.%m.%d" );
mygrid.setColumnsVisibility( vsb );
mygrid.enableSmartRendering( true, 200 );
mygrid.init();
// one variant with filterByAll()
mygrid.load( "uzs1.php?lauku_eile=" + [b]slc_fld[/b], function()
{
mygrid.filterByAll();
});
/* other variant without filterByAll()
mygrid.load( "uzs1.php?lauku_eile=" + slc_fld );
*/
}
}
}
-
At first time - grid_rst( false ) . All vars for grid init returns , all is working OK . Filters are working OK . In ChromePhp console I’m seeing , that MySqli conector ( db_mysqli.php ), formats filters for “#connector_select_filter” as “DISTINCT” queries and render table .
-
Now I’m moving column ( let say “Ord.week” - 9 order , above “Ord.date” , ord. 8 ) . After moving I’m saving this new state , formating array with new sets ( order ) and formatting new slc_fld for table rendering . That is grid_rst( true ) - with grid reloading condition .
At first time ( grid_rst( false ) ) slc_fld was - “uzsak,preke,telkinys,uzs_kiekis,specai,svarbus,mazi,uzs_spalv,uzs_data,uzs_sav” . Now , for reloading , I’m clear seeing new field order “uzsak,preke,telkinys,uzs_kiekis,specai,svarbus,mazi,uzs_spalv,uzs_sav,uzs_data” . “uzs_sav” and “uzs_data” changed order .
ClearAll( true ) grid , init’ed , loaded - all is working OK , except filters … . In “Ord.date” leaves filter data of “Ord.week” and in “Ord.week” filters are “Ord.date” values .
ChromePhp from db_mysqli.php didn’t show “DISTINCT” queries for filters .
I’m thinking that here is a bug . If I’m fully reloading grid with new column order , then and filters must be renewed .
I tried variuos variants - and with clearAndLoad() . But it seems that with full clearAll( true ), is the best way . Only leave problem with filters …
How to solve that problem ?
With best regards !