Auto-Filter wie in Excel?
-
- Beiträge: 20
- Registriert: Sa 15. Feb 2025, 13:33
Auto-Filter wie in Excel?
In Excel kann man mit Auto-Filter seine Daten in den Spalten sortieren.
Gibt es ein solche Funktion auch in Lazarus?
Gibt es ein solche Funktion auch in Lazarus?
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
Meinst du in der IDE oder bei einer Liste in deinem Programm ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Auto-Filter wie in Excel?
Da müsstest du schon sagen in welchem Zusammenhang.Anfänger33 hat geschrieben: So 20. Apr 2025, 15:05 In Excel kann man mit Auto-Filter seine Daten in den Spalten sortieren.
Gibt es ein solche Funktion auch in Lazarus?
"Einfach so" wohl eher nicht, aber mit SQL kann man alles filtern und sortieren.
-
- Beiträge: 20
- Registriert: Sa 15. Feb 2025, 13:33
Re: Auto-Filter wie in Excel?
Naja im fertigen Programm. Der User soll selbst die Filter einstellen können.
Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
GTK4 kann dies mit ColumnView und dem GTKSorter.Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
Ob die LCL auch sowas bietet, kann ich nicht sagen.
Soviel mir ist, kann dies TStringGrid, der LCL.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Auto-Filter wie in Excel?
Grüße / Pozdrawiam
paweld
paweld
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Also in einer TStringgrid habe ich das bisher immer über die Rowhöhe gemacht (Beispiel aus dem FPC_DOOM WAD_Viewer:
Aber wenn's da nen eleganteren Weg gibt würde der mich auch interessieren 
Code: Alles auswählen
Procedure TForm1.Edit1Change(Sender: TObject);
Var
c, i: Integer;
s: String;
Begin
StringGrid1.BeginUpdate;
ClearOtherFilter(edit1);
If Edit1.text = '' Then Begin
For i := 1 To StringGrid1.RowCount - 1 Do Begin
StringGrid1.RowHeights[i] := StringGrid1.RowHeights[0];
End;
c := StringGrid1.RowCount - 1;
End
Else Begin
s := UpperCase(edit1.text);
c := 0;
For i := 1 To StringGrid1.RowCount - 1 Do Begin
If pos(s, StringGrid1.Cells[IndexLumpName, i]) = 0 Then Begin
StringGrid1.RowHeights[i] := 0;
End
Else Begin
StringGrid1.RowHeights[i] := StringGrid1.RowHeights[0];
c := c + 1;
End;
End;
End;
StringGrid1.EndUpdate();
label2.caption := format('%d of %d lumps', [c, StringGrid1.RowCount - 1]);
End;

--
Just try it
Just try it
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
Dies ist ein Ansatz, wie man die Grid sortieren kann.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
grid: TStringGrid;
y, x: integer;
begin
grid := TStringGrid.Create(Self);
grid.Parent := Self;
grid.FixedCols := 0;
grid.DoubleBuffered := True;
grid.TitleFont.Style := [fsBold];
grid.AlternateColor := clMoneyGreen;
grid.ColumnClickSorts := True;
grid.Align := alClient;
grid.RowCount := 18;
grid.ColCount := 4;
for x := 0 to grid.ColCount - 1 do begin
grid.Cells[x, 0] := 'Col' + IntToStr(x);
for y := 1 to grid.RowCount - 1 do begin
grid.Cells[x, y] := IntToStr(Random(100));
end;
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Auto-Filter wie in Excel?
wenn ich davon ausgehe dass dein "Grid" ein TDBGrid ist der per SQL mot Daten gefüllt wird, empfehhle ich mal den Tip von paweld : viewtopic.php?p=149752#p149752
Das Package kann noch viel mehr und ist recht gut konfigurierbar.
Das Package kann noch viel mehr und ist recht gut konfigurierbar.
- h-elsner
- Lazarusforum e. V.
- Beiträge: 281
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Für ein normales TStringGrid (welches ich sehr häufig benutze) gefällt mir die Idee mit der Zeilenhöhe sehr gut. Warum bin ich nicht darauf gekommen? Es läuft auch sehr schnell ab.
Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
Code: Alles auswählen
function FilterColumn(var aGrid: TStringGrid;
const aCol: integer; aText: string): integer;
var
i: integer;
begin
result:=0;
aGrid.BeginUpdate;
try
for i:=aGrid.FixedRows to aGrid.RowCount-1 do begin
if aGrid.Cells[aCol, i]=aText then begin
aGrid.RowHeights[i]:=aGrid.DefaultRowHeight;
result:=result+1;
end else
aGrid.RowHeights[i]:=0;
end;
finally
aGrid.EndUpdate;
end;
end;
procedure ResetAllFilterColumn(var aGrid: TStringGrid);
var
i: integer;
begin
aGrid.BeginUpdate;
try
for i:=aGrid.FixedRows to aGrid.RowCount-1 do
aGrid.RowHeights[i]:=aGrid.DefaultRowHeight;
finally
aGrid.EndUpdate;
end;
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Auto-Filter wie in Excel?
Kannst du mal ein Beispiel daraus machen und hier posten?h-elsner hat geschrieben: Mo 21. Apr 2025, 10:32 Für ein normales TStringGrid (welches ich sehr häufig benutze) gefällt mir die Idee mit der Zeilenhöhe sehr gut. Warum bin ich nicht darauf gekommen? Es läuft auch sehr schnell ab.
Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
...
- h-elsner
- Lazarusforum e. V.
- Beiträge: 281
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Wie meinst du das? Wie man die function anwendet?Kannst du mal ein Beispiel daraus machen und hier posten?
- h-elsner
- Lazarusforum e. V.
- Beiträge: 281
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Ein Beispielprojekt, so etwa?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Auto-Filter wie in Excel?
Danke für das Testprojekt. Irgendwie raffe ich das nicht. Oben stand beschrieben, daß da was mit der Zellenhöhe sei. Das hab ich nicht kapiert und auch aus dem Beispiel werde ich da nicht so richtig schlau draus. Möglicherweise habe ich grad einen kleinen Blackout im Kopf.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Die Idee ist eigentlich recht einfach
In einer Stringgrid kannst du jeder Zeile eine Eigene "Höhe" in Pixeln geben.
Die Filterfunktion setzt die Höhe einer Zeile die nicht angezeigt werden soll auf 0
\-> der Mensch sieht sie nicht mehr, für den Rechner ist sie noch da, alle sind Glücklich und das Stringgrid wurde nicht "umsortiert" oder ähnliches.
Ich hatte das vor allem gepostet, weil ich sehen wollte ob es etwas besseres gibt, weil sich das für mich a bissl nach Missuse anfühlt, auch wenn es tadellos funktioniert 
In einer Stringgrid kannst du jeder Zeile eine Eigene "Höhe" in Pixeln geben.
Die Filterfunktion setzt die Höhe einer Zeile die nicht angezeigt werden soll auf 0
\-> der Mensch sieht sie nicht mehr, für den Rechner ist sie noch da, alle sind Glücklich und das Stringgrid wurde nicht "umsortiert" oder ähnliches.
Code: Alles auswählen
aGrid.RowHeights[i]:=0;

--
Just try it
Just try it