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.
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.