AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Klick auf Kopfzeile von StringGrid -> sortieren lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Klick auf Kopfzeile von StringGrid -> sortieren lassen

Ein Thema von Alex_ITA01 · begonnen am 28. Jun 2005 · letzter Beitrag vom 3. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Klick auf Kopfzeile von StringGrid -> sortieren lassen

  Alt 28. Jun 2005, 08:40
Hallo erstmal,
ich habe ein Problem mit einem StringGrid. Ich habe da eine feste Kopfzeile (FixRow = 1) und möchte, wenn ich auf eine Spalte dieser Kopfzeile klicke so eine "Aufwärtssortierung" bzw "Abwärtssortierung" machen. Wie zum Beispiel bei Windows wenn ich nach Datum sortiere oder nach Name usw. Geht das mit einem StringGrid überhaupt?

Wäre euch sehr dankbar...
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Peppi999

Registriert seit: 27. Jun 2005
6 Beiträge
 
#2

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 28. Jun 2005, 09:26
hi,

ich weiß, dass man eine ListView sortieren lassen kann.
Dafür benötigt man die beiden Funktionen

OnColumnClick
OnCompare

Diese beiden Funktionen gibt es beim StringGrid nicht.
...muss ja nicht heissen dass es damit nicht geht, aber ich wüßte jetzt nicht wie...

Bei der ListView gehts wie gesagt auf jeden Fall...kannst du die nicht verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#3

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 28. Jun 2005, 09:27
Hi Alex,

Google hilft dir:

Stringgrid sortieren

du musst nur noch ermitteln, welche Spalte im Kopf angecklickt wurde:

Delphi-Quellcode:

Var
 Spalte:Integer;

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var
  i,breite:Integer;
begin
if y<=StringGrid1.RowHeights[0] then
begin
  breite:=0;
  For i:=0 To StringGrid1.ColCount-1 Do
  Begin
    breite:=breite+StringGrid1.ColWidths[i];
    if breite>x Then
    Begin
      spalte:=i;
      Break;
    end;
  end;
   Label1.Caption:=IntToStr(Spalte);
   // Hier Soriter-algo
end;
end;
mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 28. Jun 2005, 10:20
Danke für den Link ins SwissCenter. Das hat mir super geholfen. Danke...
ListView kann ich leider nicht nehmen aber danke nochmals für die Tips.

MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
PPaB

Registriert seit: 24. Jan 2009
35 Beiträge
 
#5

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 17:05
Hätte nochmal zu dem sortieren eine Frage:
Bei mir passt die Tabelle nicht auf den Bildschirm und man muss scrollen, um den anderen Teil zu sehen.
Ich möchte aber trotzdem sortieren, weiß aber nicht genau, was ich tun muss, damit das Programm automatisch erkennt, wie weit die Scrollbar verschoben wurde bzw welche Zelle ausgewählt wurde. Hat da jemand eine Idee?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 17:35
Hallo,

so weit ich das überschaue, wird die gesamte Spalte sortiert
und nicht nur der Teil der gerade sichtbar ist.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
PPaB

Registriert seit: 24. Jan 2009
35 Beiträge
 
#7

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 18:26
Da hab ich mich falsch ausgedrückt. Ich meinte:
Meine Zeilen sind so viele, dass diese rechts aus dem Bildschirm gehen und somit durch eine Horizontale Scrollbar erst sichbar gemacht werden können. Da ja bei der obrigen Lösung das Programm nicht weiß, wie weit man jetzt gescrollt hat, sortiert es eine falsche Spalte.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 19:19
Hallo,

ja da habe ich es falsch verstanden.

Mit folgendem Code habe ich in einem Projekt das StringGrid sortieren lassen.
Die Methode hat auch funktoniert wenn das StringGird horizontal gescrollt war.
Die SpaltenNummern der Spalteköpfe ändert sich ja durch das scrollen nicht.

Delphi-Quellcode:
procedure TForm1.SortStringGrid(GenStrGrid: TStringGrid; ThatCol: Array of Integer);
const
  // Define the Separator
  TheSeparator = '@';
var
  CountItem, I, J, K, ThePosition: integer;
  MyList: TStringList;
  MyString, TempString: string;
begin
  // Give the number of rows in the StringGrid
  CountItem := GenStrGrid.RowCount;
  //Create the List
  MyList := TStringList.Create;
  MyList.Sorted := False;
  try
    begin
      for I := 1 to (CountItem - 1) do
        MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol[0]] + TheSeparator +
          GenStrGrid.Rows[I].Text);
      //Sort the List
      Mylist.Sort;

      for K := 1 to Mylist.Count do
      begin
        //Take the String of the line (K – 1)
        MyString := MyList.Strings[(K - 1)];
        //Find the position of the Separator in the String
        ThePosition := Pos(TheSeparator, MyString);
        TempString := '';
        {Eliminate the Text of the column on which we have sorted the StringGrid}
        TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
        MyList.Strings[(K - 1)] := '';
        MyList.Strings[(K - 1)] := TempString;
      end;

      // Refill the StringGrid
      for J := 1 to (CountItem - 1) do
        GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
    end;
  finally
    //Free the List
    MyList.Free;
  end;
end;
[Quelle: unbekannt]

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 19:34
Überlege erst mal was überhaupt wo wie ist.

Zitat von PPaB:
Meine Zeilen sind so viele, dass diese rechts aus dem Bildschirm gehen und somit durch eine Horizontale Scrollbar..
Bei zuvielen Zeilen kommt eine vertikale Scrollbar. Wo kommt aber eine horizontale her ? Oder gehts um zu viele Spalten ?

Jedenfalls ist das Problem zweigeteilt :

1. Spalte ermitteln, auf die geklickt wird.
2. danach sortieren.

Müsste das mal suchen, wie ich das genau mache. Aber erst, wenn klar ist, wo überhaupt das Problem liegt.

P.S.: die schweizer Lösung hatte ich auch gesehen, die schied aber wegen zu wenig Flexibilität aus. Kernpunkt der Sache stellt eine TObjectList dar. Also bei mir.

P.S.2 : das Letzte kommt auch von den Schweizern. Das Gesagte gilt auch hierfür.
Gruß
Hansa
  Mit Zitat antworten Zitat
PPaB

Registriert seit: 24. Jan 2009
35 Beiträge
 
#10

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 8. Jan 2010, 21:07
Mein Problem ist beim ermitteln der Spalte.

Ok habe das falsch beschrieben.
Ich habe zu viele Spalten, so dass diese nicht ganz angezeigt werden > somit eine Horizontale Scrollbar.

Das sortieren klappt ja ohne Probleme, da man ja dort dann einfach die Zahl der Spalte angibt.
Aber bei der Lösung der Spaltenermittlung ist halt das Problem, dass man vom Bildschirm ausgeht und somit nicht beachtet, dass sich die Position der einzelnen Spalten ändern kann (durch die Scrollbar)!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
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