unit AsyRxDBGrid;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, LCLType, LCLIntf, Forms, Controls, Buttons,
Graphics, Dialogs, Grids, DBGrids, DB, PropertyStorage,
LMessages, types, StdCtrls, Menus, LCLVersion, rxdbgrid;
type
{ TAsyRxDBGrid }
TAsyRxDBGrid = class(TRxDBGrid)
private
FTempText : string;
FStringEditor: TStringCellEditor;
protected
procedure UpdateData; override;
procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
public
function EditorByStyle(Style: TColumnButtonStyle): TWinControl; override;
constructor Create(aOwner: TComponent); override;
published
end;
procedure Register;
implementation
procedure Register;
begin
{$I asyrxdbgrid_icon.lrs}
RegisterComponents('Asystel',[TAsyRxDBGrid]);
end;
{ TAsyRxDBGrid }
procedure TAsyRxDBGrid.UpdateData;
var
edField: TField;
begin
edField := SelectedField;
if (edField<>nil) and
(edField.DataType = ftDateTime) and
(self.DataSource.DataSet.State in [dsEdit, dsInsert]) then
begin
edField.AsDateTime := StrToDateTime(FTempText);
end else
inherited UpdateData;
end;
procedure TAsyRxDBGrid.SetEditText(ACol, ARow: Longint; const Value: string);
begin
inherited SetEditText(ACol, ARow, Value);
FTempText:=Value;
end;
function TAsyRxDBGrid.EditorByStyle(Style: TColumnButtonStyle): TWinControl;
var
F: TField;
begin
if Style = cbsAuto then
begin
F := SelectedField;
if Assigned(F) then
begin
if F.DataType in [ftDateTime] then
begin
Result := FStringEditor; // for test reason use String editor...
exit;
end;
end;
end;
Result:=inherited EditorByStyle(Style);
end;
constructor TAsyRxDBGrid.Create(aOwner: TComponent);
begin
Inherited Create(aOwner);
FStringEditor := TStringCellEditor.Create(nil);
FStringEditor.name :='StringEditor';
FStringEditor.Text:='';
FStringEditor.Visible:=False;
FStringEditor.Align:=alNone;
FStringEditor.BorderStyle := bsNone;
end;
end.