Einzelnen Beitrag anzeigen

Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: TadvStringGrid -- Verschieben der Spalten

  Alt 31. Okt 2005, 14:26
wow umständlich und wenig wartungsfreundlich oder?

1. bitte setz beim codeposten doch die delphitags!
2. ich würde mir überlegen, ob ihr euch nicht eine liste anlegt, in der die felder stehen!

Delphi-Quellcode:
type
  tint=class
    value:integer;
  end;

  tfelddef=record
    fname:string;
    display:string;
    typ:integer; // 1:string 2:integer 3:float etc
  end;

  var
    fldlist:array of tfelddef;
    anzfields:integer;
...
procedure init;
begin
  anzfields:=3; // 3 => anzahl der felder in der db hier nur als beispiel
  setlength(fldlist,anzfields);
  fldlist[0].fname:='name';
  fldlist[0].display:='Name';
  fldlist[0].typ:=1;

  fldlist[1].fname:='alter';
  fldlist[1].display:='Alter';
  fldlist[1].typ:=2;

  fldlist[1].fname:='groesse';
  fldlist[1].display:='Größe';
  fldlist[1].typ:=3;

  ...// hier die anderen
end;


procedure load;
var
  zeile,spalte:integer;
  feldname:tint;
begin
  query.sql.txt:='select * from tabelle'; // etc
  query.open;

  if query.eof then
    exit;
  
  zeile:=0;

  for spalte:=0 to anzfields-1 do
  begin
    feldname:=tint.Create;
    feldname.value:=spalte; //<- spalte zum ladezeitpunkt

    grid.Objects[0,Zeile]:=feldname; // der spalte(in zeile 0) das object zuweisen
    grid.cell[0,Zeile]:=fldlist[spalte].display; // titel
  end;
  
  while not query.eof do
  begin
    inc(zeile); // nächste zeile

    for spalte:=0 to anzfields-1 do
    begin
      case fldlist[spalte].typ of
        1: grid.Cells[Spalte,Zeile]:=query.FieldByName(fldlist[spalte].fname).asString;
        2: grid.Ints[Spalte,Zeile]:=query.FieldByName(fldlist[spalte].fname).asInteger;
        3: grid.floats[Spalte,Zeile]:=query.FieldByName(fldlist[spalte].fname).asFloat;
      end;
    end;

    query.next;
  end;
end;
- baeachte dabei, dass du die objekte ggf. wieder freigeben musst.
- das speichern über die feldnamen sollte dann keine probleme machen, da der db die reihenfolge egal ist, wenn du per feldname die werte zuweist.
  Mit Zitat antworten Zitat