Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: DBGrid Spaltenüberschrift <> Feldname

  Alt 24. Feb 2006, 10:53
Man kann die sichtbaren Feldnamen (DisplayLabel) auch zur Laufzeit einstellen.
grosser Vorteil: man braucht keine persistenten Felder anlegen

Hier ein Unit, die zeigt, wie man alle Zuordnungen Feldname->DisplayLabel zentral für die gesamte Anwendung abhandeln kann:
Delphi-Quellcode:
unit UDisplayLabels;

interface

uses DB;

procedure SetDisplayLabels(ds:TDataset);

implementation

type
   T2strings = array[1..2] of string;


// Zuordnungstabelle
// FieldName -> DisplayName
const
   convliste: array[0..6] of T2strings =
   (
   ('IdWBruecke', 'Wechselbrücke'),
   ('IdTor', 'Tor-Nr'),
   ('EDatum', 'Einlieferdatum'),
   ('MaxHeight', 'max. Höhe'),
   ('IdLocation', 'Standort'),
   ('LastChange', 'letzte Änderung'),
   ('Disabled', 'Gesperrt')
   );

// suche DisplayLabel, das zu "fieldname" passt
function ConvertString(const fieldname:string):string;
var
   i : Integer;
begin
   for i := Low(convliste) to High(convliste) do
   begin
      if convliste[i][1] = fieldname then
      begin
         Result := convliste[i][2];
         Exit;
      end;
   end;
   Result := ''; // nix gefunden
end;


procedure SetDisplayLabels(ds:TDataset);
var
   i : Integer;
   dl : string;
begin
   for i := ds.Fields.Count-1 downto 0 do // herunterzählen auf 0 ist etwas schneller
   begin
      dl := ConvertString(ds.Fields[i].FieldName);
      if dl <> 'then
         ds.Fields[i].DisplayLabel := dl;
   end;
end;

end.
Anwendung:
Einfach die Procedure SetDisplayLabels im Event AfterOpen aufrufen:
Delphi-Quellcode:
procedure TForm1.Query1AfterOpen(DataSet: TDataSet);
begin
   SetDisplayLabels(DataSet);
end;
Andreas
  Mit Zitat antworten Zitat