listbox über ontitleclick-even in dbgrid

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
erik
Beiträge: 11
Registriert: Di 18. Okt 2011, 18:11

listbox über ontitleclick-even in dbgrid

Beitrag von erik »

Hallo,

ich würde gern wissen, ob es möglich ist (und wenn ja wie ;) ) eine listbox (mit multiselect) oder eine checkboxgroup über jede spalte der ersten zeile einer dbgrid zu legen und diese über ontitleklick aufzurufen?
ich habe eine dbgrid mit verschiedenen spalten und ich würde gern filter über das ontitleclick-event spaltenspezifisch aufrufen (es sollen alle werte die in der spalte stehen einmalig aufgelistet werden und nach anwahl/abwahl die passenden werte im grid angezeigt/nicht angezeigt werden)
das angehängte bildchen zeigt, wie das was ich mir vorstelle unter excel aussieht

vielen dank für eure hilfe

erik

ps die dbgrid ist an eine sqlite3 datenbank angebunden
Dateianhänge
auswahl.png
auswahl.png (12.08 KiB) 1078 mal betrachtet

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: listbox über ontitleclick-even in dbgrid

Beitrag von Christian »

Du kannst die soch in OnTitleClick erzeugen und dann unter den selektierten Columnheader packen.
Könntest z.b. durch Columns gehn und die Width aufaddieren bis du bei deiner Spalte angekommen bist.
Oder wo genau hakts jetzt?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

erik
Beiträge: 11
Registriert: Di 18. Okt 2011, 18:11

Re: listbox über ontitleclick-even in dbgrid

Beitrag von erik »

hey,
das ist wahrscheinlich bei mir nur ein logikproblem ^^

ich muss die filter ja per sql an die datenbank schicken. Und wenn ich die listbox jedesmal bei dem ontitleclick erzeuge verwirft es mir ja eventuelle selektionen oder sehe ich das falsch? außerdem würde ich die datenbank gern so filtern, dass es möglich ist, zb erst nach einem(oder mehreren) wert(en) in spalte 1 zu filtern und dann die anzeigten werte nach einem(oder mehreren) wert(en) in spalte zwei etc. :?: irgendwie stehe ich da grade auf dem schlauch, sorry
ich hätte da auch noch eine frage, gibt es eine möglichkeit, die anzeigten werte in der dbgrid (bzw dem dahinterliegenden dataset) so zu kopieren, dass man sie in excel einfügen kann und das die einzelnen spalten erkennt? also der wert aus spalte eins in der markierten zelle eingefügt wird und der rest dann spaltenweise daneben?

DANKE

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: listbox über ontitleclick-even in dbgrid

Beitrag von Socke »

erik hat geschrieben:ich muss die filter ja per sql an die datenbank schicken. Und wenn ich die listbox jedesmal bei dem ontitleclick erzeuge verwirft es mir ja eventuelle selektionen oder sehe ich das falsch?
Du musst die Auswahl des Benutzers irgendwo zwischenspeichern (Array, TStringList, etc.); damit kannst du beim Klicken die ausgewählten Elemente wieder auswählen.
erik hat geschrieben:außerdem würde ich die datenbank gern so filtern, dass es möglich ist, zb erst nach einem(oder mehreren) wert(en) in spalte 1 zu filtern und dann die anzeigten werte nach einem(oder mehreren) wert(en) in spalte zwei etc. :?: irgendwie stehe ich da grade auf dem schlauch, sorry
Wenn dir, wie oben geschrieben, merkst, nach welchen Daten in der ersten Spalte ausgewählt waren, kannst darauf aufbauend auch die anderen Listboxen schon vorfiltern.
erik hat geschrieben:ich hätte da auch noch eine frage, gibt es eine möglichkeit, die anzeigten werte in der dbgrid (bzw dem dahinterliegenden dataset) so zu kopieren, dass man sie in excel einfügen kann und das die einzelnen spalten erkennt? also der wert aus spalte eins in der markierten zelle eingefügt wird und der rest dann spaltenweise daneben?
Ich kenn mich mit den Datenbank-Komponenten nicht so gut aus; Du kannst aber in jedem Fall auf den Tastendruck (falls es kein besseres Ereignis oder eine bessere TAction gibt) reagieren und manuell die Daten in die Zwischenablage einfügen. Dazu brauchts nur zwei Schleifen, die zwischen zwei Spalten einen Tabulator (#9) und zwischen zwei Zeilen einen Zeilenumbruch (#13#10) einfügen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

erik
Beiträge: 11
Registriert: Di 18. Okt 2011, 18:11

Re: listbox über ontitleclick-even in dbgrid

Beitrag von erik »

ich hab jetzt mal bisschen probiert,

das mit der column.width aufaddieren klappt an sich, zumindest solange ich nicht nach rechts im grid scrolle, wenn ich das allerdings tue zählt es auch noch die spalten, die derzeit nicht sichtbar(weggescrollt sind mit) ich habe es auch schon mit iscellvisible probiert, da fängt der zählindex zwar wirklich erst bei der ersten sichtbaren spalte an, aber irgendwie geht es trotzdem nicht, kann mir da vielleicht jemand einen tip geben,woran es liegt?

Code: Alles auswählen

var breite,breite2,i:integer;
begin
 breite:=0;
 breite2:=0;
 
 for i:=0 to column.Index do
    begin
            if dbgrid1.Columns.Items[i].Visible=true then
       // if dbgrid1.Columns.Grid.IscellVisible(dbgrid1.Columns.Items[i].Index,1)=true then
            begin
                     if i=0 then 
                              begin 
                                     breite:=dbgrid1.Left+15; 
                                     breite2:=dbgrid1.Columns.Items[i].Width; 
                               end;
 
                    if i>0 then
                             begin 
                                     breite:=breite+breite2;  
                                     breite2:=dbgrid1.Columns.Items[i].Width;
                             end;
 
                    button2.Left:=breite; // legt den button unter den columnheader
 
            end;
 
    end;
end;

Antworten