Entwickler-Ecke
Datenbanken - Zahlen in DBGrid einfügen
sigi - So 12.04.15 11:09
Titel: Zahlen in DBGrid einfügen
Hallo,
ich habe ein DBGrid über DataSource, ADOTable und ADOConnection (Microsoft.Jet.OLEDB.4.0) mit Access (mdb) verbunden. Soweit ok. Daten werden im Grid angezeigt. Nun möchte ich Zahlen die einstellig im Grid eingegeben werden eine 0 voranstellen. Wie bekomme ich per Code z.B. 04 in ein Feld? Wegen seltener Benutzung sind meine Delphi Kenntnisse nicht grade berauschend, deshalb wäre eine Antwort, die auch ein Anfänger versteht nett.
Danke schon im Voraus.
Gruß sigi
WasWeißDennIch - So 12.04.15 11:24
Ich glaube, Du suchst das
OnGetText [
http://docwiki.embarcadero.com/Libraries/XE5/de/Data.DB.TField.OnGetText]-Ereignis des DB-Feldes.
[edit] Ich habe mal ein Beispiel gebastelt. Alle Daten und Komponenten werden zur Laufzeit erstellt, es sollte sich also ohne große Verrenkungen nachvollziehen lassen (komplette Unit).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, DBClient, MidasLib;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private FDataset: TClientDataset; FDatasource: TDataSource; FDBGrid: TDBGrid; procedure NummerGetText(Sender: TField; var Text: string; DisplayText: Boolean); public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); var Field: TFieldDef; idx: integer; begin FDataset := TClientDataSet.Create(self); Field := FDataset.FieldDefs.AddFieldDef; Field.DataType := ftInteger; Field.Name := 'Nummer'; Field := FDataset.FieldDefs.AddFieldDef; Field.DataType := ftString; Field.Name := 'Wert'; FDataset.CreateDataSet;
FDataset.FieldByName('Nummer').OnGetText := NummerGetText;
FDatasource := TDataSource.Create(self); FDatasource.DataSet := FDataset; FDBGrid := TDBGrid.Create(self); FDBGrid.DataSource := FDataSource; FDBGrid.Parent := self; FDBGrid.Align := alClient; for idx := 1 to 99 do begin FDataset.Append; FDataset.FieldByName('Nummer').Value := idx; FDataset.FieldByName('Wert').Value := Format('%d. Datensatz', [idx]); end; FDataset.First; end;
procedure TForm1.NummerGetText(Sender: TField; var Text: string; DisplayText: Boolean); begin Text := Format('%.2d', [Sender.AsInteger]); end;
end. |
[/edit]
Delete - So 12.04.15 11:51
Neben dem bereits vorgeschlagenen OnGetText, das ein weiteres Feld in deiner Query benötigt, könntest du auch das Feld selbst bearbeiten, indem du DisplayMask setzt. Dazu klickst du die betreffende Query bzw. dein Dataset mit der rechten Maustaste an und rufst da den Feldeditor auf. Darin wählst du das betreffende Feld und gibst in das Property DisplayMask z.B. 0000.00 ein. Das bewirkt, daß der Inhalt dieses Feldes stets mit mindestens vier Stellen und zwei Nachkommastellen angezeigt wird. Gibst du stattdessen nur 0000 in DisplayMask ein, dann wird dein Betrag stets vierstellig ohne Nachkommastellen angezeigt, wobei fehlende Stellen in beidne Fällen mit 0 aufgefüllt werden.
jasocul - Mo 13.04.15 08:11
Ich bevorzuge die Variante ohne persistente Felder.
Im AfterOpen deines DataSets steht dann eine Zeile dieser Art:
Delphi-Quelltext
1:
| TNumericField(DataSet.FieldByName('MeinFeldbezeichner')).DisplayFormat := '00'; |
Dadurch würde in deinem Beispiel aus 4 eine 04.
Wenn du mehr Stellen benötigst, musst du das DisplayFormat anpassen.
sigi - Di 14.04.15 11:12
Danke für die Antworten.
Gruß sigi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!