Convertir dbgrid en stringgrid

Contenu du snippet

Une petite procedure qui permet de convertir un DBgrid en stringgrid.
Très pratique pour ceux qui ne veulent pas s'embêter à utiliser le composant DBgrid qui est très contraignant et peu modulable.

Source / Exemple :


procedure dbgridtostringgrid(db:tdbgrid;str:tstringgrid);

var ta:tdataset; // dataset est le lien de donné de la base du dbgrid
    i,j:integer; // compteur de parcours

begin
  ta:=db.DataSource.DataSet; //on récupère le dataset dans ta
  if ta.Filtered then //on place le pointer sur le premier élément du filtre si le dbgrid est filtré
    ta.FindFirst
  else
    ta.First; //sinon on place le pointer sur le premier élément
  j:=0; //initialisation de j
  str.RowCount:=1;
  str.FixedCols:=0; //nombre de colonne fixe (gris)
  str.ColCount:=db.Columns.Count; //on ajuste le nombre de colonne du stringgrid en fonction du dbgrid
  for i:=0 to db.Columns.Count-1 do //on parcours toutes les colonnes de la première ligne pour ajuster la ligne fixe
    begin
    str.Cells[i,0]:=db.Columns.Items[i].FieldName;
    end;
  while not ta.Eof do //tant que l'on a pas atteint la fin des données
    begin
    j:=j+1; //on incrémente le conteur de ligne (pour le stringgrid)
    str.RowCount:=str.RowCount+1; //on ajoute une ligne dans le stringgrid
    for i:=0 to db.Columns.Count-1 do //pour toutes les colonnes on recopie les données
          str.Cells[i,j]:=db.Columns.Grid.Fields[i].AsString;
    ta.Next; //on passe à la prochaine ligne de la source de données
    end;
  if str.RowCount>1 then str.FixedRows:=1; //si il y a au moins une ligne, la première est fixe
end;

Conclusion :


On peut rajouter un traitement pour le cas où il n'y a aucune ligne dans le dbgrid mais une exception doit être levé déjà bien avant.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.