Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DevExpress Grid: Filter mit Sonderzeichen (https://www.delphipraxis.net/184160-devexpress-grid-filter-mit-sonderzeichen.html)

Nersgatt 28. Apr 2015 14:39

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Der Support von DevExpress schlägt auch die Verwendung von OnFilterRecord vor.
Ich werde erst mal bei der Normalisierung der Daten mit der Function bleiben. Da frage ich mich, ob man an meiner Funktion noch etwas Geschwindigkeit rausholen kann. Aber dafür mache ich ein eigenes Topic auf.

Dejan Vu 29. Apr 2015 06:31

AW: DevExpress Grid: Filter mit Sonderzeichen
 
OnFilterRecord ist doch sauber, dort rufst Du deine 'CompareNormalized' Funktion auf. Der nette Nebeneffekt: Du kannst die Funktion nicht nur zum Vergleich / Filtern sondern auch noch zum Sortieren verwenden.

Wo ist dein Problem? Das kriegen wir auch noch gebacken (himitsu hats ja schon gesagt).

Delphi-Quellcode:
Function CompareNormalized(a,b : String) : integer;
begin
  Result := CompareText(Normalized(a), Normalized(b));
end;

Function Normalized (const a : String) : String;
Var
  c : Char;

Begin
  Result := '';
  for c in a do Result := NormalizedChar(c);
End;

Function NormalizedChar (c : Char) : Char;
Begin
  if c='Ł' then result := 'L'
  else if c='ą' then result := 'a';
  ...
  else result := c;
end;

Nersgatt 29. Apr 2015 06:48

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1299615)
OnFilterRecord ist doch sauber, dort rufst Du deine 'CompareNormalized' Funktion auf. Der nette Nebeneffekt: Du kannst die Funktion nicht nur zum Vergleich / Filtern sondern auch noch zum Sortieren verwenden.

Wo ist dein Problem? Das kriegen wir auch noch gebacken (himitsu hats ja schon gesagt).

Ich habe mir OnFilterRecord nochmal genauer angeschaut. Leider ist das wirklich nicht tauglich, denn das Ereignis wird nur für jeden Record einmal aufgerufen, der bereits in der gefilterten Ergebnismenge ist. Wenn ich somit nach 'L*' filtere, ist der Record mit Ł gar nicht mehr in der Ergebnismenge und OnFilterRecord wird für diesen Datensatz nicht aufgerufen.

Aber ich beschäftige mich nochmal mit der Ereignissen von DataController.Filter. Da kann ich vielleicht einhaken.

Dejan Vu 29. Apr 2015 08:15

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Ich sehe gerade, OnFilterRecord im Grid ist wohl auch nicht das richtige (ich habe aber ein ziemlich altes TcxGrid).
Echt kniffelig.

Ich rudere zurück. Ich würde das auch über die View lösen, allerdings über eine zweite Spalte (z.B. 'NormalisiertesFeld'). Im DataController.Filter.OnBeforeChanged würde ich dann den aDataSet.Filter so setzen:

Delphi-Quellcode:
ADataset.Filter := StringReplace(aFilterText,'PolnischesFeld','NormalisiertesFeld',[]);
aDataset.Filter := True;
So siehst Du im Grid die polnischen Namen, kannst aber über 'L' und 'a' filtern.

DataCool 29. Apr 2015 17:09

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Zitat:

Zitat von Nersgatt (Beitrag 1299516)
Zitat:

Zitat von himitsu (Beitrag 1299515)
Du könntest es doch auch erst im DisplayValue normalisieren?

Das hab ich grade mal ausprobiert, indem ich OnGetDisplayValue implementiert habe. Leider klappt das nicht. Das Grid filtert wohl nicht den DisplayValue, sondern auf den realen Wert.

Es gibt eine Option dafür :wink:

xyzView.DataController.Options.dcoSortByDisplayTex t := True

Greetz Data

Nersgatt 30. Apr 2015 05:38

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Zitat:

Zitat von DataCool (Beitrag 1299703)
Zitat:

Zitat von Nersgatt (Beitrag 1299516)
Zitat:

Zitat von himitsu (Beitrag 1299515)
Du könntest es doch auch erst im DisplayValue normalisieren?

Das hab ich grade mal ausprobiert, indem ich OnGetDisplayValue implementiert habe. Leider klappt das nicht. Das Grid filtert wohl nicht den DisplayValue, sondern auf den realen Wert.

Es gibt eine Option dafür :wink:

xyzView.DataController.Options.dcoSortByDisplayTex t := True

Wirkt sich aber nur auf die Sortierung aus, nicht auf die Filterung.

DataCool 30. Apr 2015 11:49

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Das Problem mit dem Filter habe ich so gelöst, das ich eine weitere unsichtbare Spalte(mit dem DisplayValue) habe
über die ich dann den Filter laufen lasse.

Dejan Vu 30. Apr 2015 13:10

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Wie machst Du das, das Du im FilterRow über der z.B. Spalte 'Namen' die Filterkriterien eintippst, aber er die unsichtbare Spalte zum Filtern verwendet?

DataCool 30. Apr 2015 15:28

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1299832)
Wie machst Du das, das Du im FilterRow über der z.B. Spalte 'Namen' die Filterkriterien eintippst, aber er die unsichtbare Spalte zum Filtern verwendet?

Gar nicht :-D, ich benutze die FilterRow nicht; Ich habe ein Textfeld was über alle relevanten Feld mit OR sucht, d.h. ich setze den Filter dann manuell im Programmcode.

Aber was spricht dann dagegen die Orginal-Column auszublenden und die Column mit dem DisplayText einzublenden und damit das suchen über die FilterRow zu ermöglichen ?!

Dejan Vu 30. Apr 2015 15:45

AW: DevExpress Grid: Filter mit Sonderzeichen
 
Also na ja.. In Polen sollte man schon die polnische Schreibweise sehen.
Es ist ja eher eine Krücke für Leute, die in polnischen Namen mit Hilfe einer deutsche Tastatur suchen wollen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz