cs_leroukin
Messages postés36Date d'inscriptionjeudi 15 novembre 2007StatutMembreDernière intervention23 juin 2010
-
22 juin 2010 à 17:07
fatmamasmoudi
Messages postés4Date d'inscriptionmardi 9 juin 2009StatutMembreDernière intervention29 juin 2011
-
29 juin 2011 à 13:04
Bonjour,
j'utilise des composants TcxGrid afin d'afficher le résultats de requetes faites via des ToracleDataset.
Le composant Tcxgrid est très pratique mais très gourmand en mémoire.
et voici mon problème :
lorsque le requête renvoi un nombre de ligne trop important (du genre 500 par exemple). le Cxgrid met alors une plombe à l'afficher, et freeze l'application si le nombre de ligne est trop important...
J'ai regardé des tuto et joué avec les options du composant afin de l'alléger un maximum (du genre ne pas autoriser l'insertion/edition etc), mais cela reste très très lent (normal à priori puisqu'il charge le tout en mémoire).
Donc la question est la suivante : Pouvez vous me donner des conseils afin d'alléger l'affichage du CxGrid ou connaissez vous un composant équivalent (ou moins puissant et donc gourmand). Entre un DbGrid et un CxGrid quoi...
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 juin 2010 à 10:21
Salut,
on voudrait bien t' aider mais le fait de ne pas dire pourquoi tu es parti sur l' utilisation de cxGrid nous aide pas ...
Pour ce qui est de la lenteur, si tu remplaces le cxGrid par une DBGrid normale et que c' est plus rapide, c' est donc bien un problème du compo utilisé.
J' ai moi même crée 2 DBGrids (TcyDBGrid et TcyDBAdvGrid) qui répond à mes besoins, télécharge donc la démo pour voir si ça répond aux tiens:
http://sourceforge.net/projects/tcycomponents/
cs_leroukin
Messages postés36Date d'inscriptionjeudi 15 novembre 2007StatutMembreDernière intervention23 juin 2010 23 juin 2010 à 11:34
Je viens de regarder tes composants. Ils sont très intéressants, mais pas adaptés à mon besoin actuel. Puisque je souhaite exploiter les filtres/tri du CxGrid.
j'ai trouvé une solution qui n'en n'est pas une : lorsque le nombre d'enregistrements est trop important je passe la propriété GridMode à true, ce qui équivaut à une simple liste, et donc allége le chargement.
Cela me permet de ne plus freezer mon appli. mais je perds tout l'interêt d'utiliser ce composant.
Une autre solution est d'utiliser le multi-thread, mais par contre ca ne changera rien au temps de chargement qui est extremment long...
Fox15145
Messages postés2Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 3 avril 2018 3 févr. 2011 à 15:54
yop,
j'arrive certainement un peu tard, mais pour un composant TcxGrid, il aurait fallu que tu nous précise si tu utilisais un TcxGridTableView ou un TcxGridDBTableView.
Au vu du problème de lenteur au chargement, j'en déduis que c'est une vue de type TcxGridTableView (Table) que tu utilise; et dans ce cas, il faut encadrer ton chargement de la vue par "ToncxGridTableView.DataController.BeginFullUpdate;" et par "ToncxGridTableView.DataController.EndFullUpdate;"
Grosso modo, cela évite le rafraîchissement graphique pendant le chargement des données.
Par exemple : (en considérant, que tu as déjà créer les colonnes dans ta TableView)
Query1.clear;
Query1.SQL.Add('SELECT id, libelle FROM t_libelles');
Query1.Open;
ToncxGridTableView.DataController.BeginFullUpdate;
While not Query1.Eof() do
begin
ToncxGridTableView.DataController.RecordCount := ToncxGridTableView.DataController.RecordCount + 1;
ToncxGridTableView.DataController.SetValue(Pred(ToncxGridTableView.DataController.RecordCount), 0, Query1.FieldByName('id').AsInteger);
ToncxGridTableView.DataController.SetValue(Pred(ToncxGridTableView.DataController.RecordCount), 1, Query1.FieldByName('libelle').AsString);
Query1.Next;
end;
ToncxGridTableView.DataController.EndFullUpdate;
En espérant ne pas avoir fait d'erreur de frappe, ni de syntaxe, sinon, ne pas hésiter à me reprendre ;-)