In der Version 6.53 existiert ein Designfehler im cxGrid, wenn in der Event OnBeforePost eine Messagebox aufgerufen wird
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet);
begin
if MessageDlg('save record?', mtConfirmation,mbYesNo,0) <> mrYes then
Abort;
end;
Der Dialog sollte eigentlich so aussehen:

Durch den Fehler sieht es aber so aus:

Als Workaround wurde mir von DevExpress folgendes empfohlen:
procedure TForm1.dxMemData1BeforePost(DataSet: TDataSet);
begin
cxGrid1.Perform(WM_SETREDRAW, Integer(false), 0);
try
if MessageDlg('save record?', mtConfirmation, mbYesNo, 0) <> mrYes then
Abort;
finally
cxGrid1.Perform(WM_SETREDRAW, Integer(true), 0);
end;
end;
Tags: Delphi Delphi 2009 DevGrid
Beim Filtern einer Column mit Datumswerten sollen nur die Jahre angezeigt werden

Dadurch ist auch eine Mehrfachauswahl möglich. dafür sind 2 Schritte notwendig: Es müssen die Events OnGetFilterValues und OnInitFilteringDateRanges genutzt werden
procedure THWFilter.OnInitFilteringDateRanges(Sender: TcxCustomGridTableItem; ADateRanges: TcxGridDateRanges);
begin
ADateRanges.Add(TcxGridYearRange); // nach Jahren filtern
end;
procedure THWFilter.OnGetFilterValues(Sender: TcxCustomGridTableItem; AValueList: TcxDataFilterValueList);
var
z: integer;
begin
// löschen der einzelnen Tage
for z := AValueList.Count - 1 downto 0 do
if AValueList[z].Kind = fviValue then
AValueList.Delete(z);
end;
Tags: Delphi Delphi 2009 DevGrid