
Es haben mich in den letzten Tage immer wieder Kunden angesprochen, wie man die neue VCL-Komponente "TCalenderView", die mit dem Update 2 von Delphi/C++Builder/RAD Studio 10.1 Berlin eingeführt wurde, mit einer Datenbank benutzen kann.
Ausgangslage: In einer Datenbanktabelle sind Datumswerte gespeichert (31.12.2015) und diese sollen visualisiert werden.
Das Ganze ist recht einfach (ohne Code) umsetzbar. Ohne Beschränkung der Allgemeinheit habe ich eine Standard-VCL-Formularanwendung erstellt mit Datenbankzugriff über FireDAC auf eine SQLite Datenbank (DB-Komponenten direkt im Form):
Danach die TCalendarView-Komponente und ein DBGrid zur Visualisierung der Tabelle / Font-Eigenschaft der Kalendar-Komponente angepasst, TDataSource hinzugefügt und verbunden (die Anwendung ist sicherlich nicht schön :-)):
Mit dem LiveBindings-Designer kommt nun die Verbindung: Ansicht | LiveBindings-Designer:
- In der CalendarView Komponente fügt man explizit "Date" als "binares Member" hinzu
- Und verknüpft die passende Spalte mit dem "Date":
- Das war es schon (für die unidirektionale Verbindung):
Möchte man auch (was wahrscheinlich ist :-) ), die Datenbankwerte auch über die TCalendarView verändern, so kann man folgendes beim OnChange der Kalendar-Komponente einpflegen:
procedure TForm1.CalendarView1Change(Sender: TObject);
begin if OrdersTable.CanModify then begin if not (OrdersTable.State in [dsEdit,dsInsert]) then OrdersTable.Edit; OrdersTable.FieldByName('OrderDate').Value := CalendarView1.Date; end; end;
(Hinweis: Da SQLite eine Single-User-Datenbank ist (Datenbankdatei ist gelockt!), habe ich in diesem Zusammenhang die Active-Property der DB-Connection und der Tabelle wieder ausgeschaltet und manuell im Form-Create gesetzt:
procedure TForm1.FormCreate(Sender: TObject); begin Sqlite_demoConnection.Connected := true; OrdersTable.Active := true; end;
[DownloadButton Product='Delphi' Caption='Download von Delphi Testversion'][DownloadButton Product='Cbuilder' Caption='Download von C++Builder Testversion']