Win7, OnBeforePost und DevExpress Grid 6.53

November 16, 2010 - Lesezeit: ~1 Minute

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:

Ansicht Fehler

 

Durch den Fehler sieht es aber so aus:

Ansicht ok

 

 

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

DevGrid 6: nur Jahre in Filterbox

Juli 21, 2010 - Lesezeit: ~1 Minute

Beim Filtern einer Column mit Datumswerten sollen nur die Jahre angezeigt werden

Filter aktiv

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