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