AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Positionen Um-Sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

Positionen Um-Sortieren

Ein Thema von rocksoft · begonnen am 19. Okt 2004 · letzter Beitrag vom 5. Jun 2011
Antwort Antwort
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#1

Positionen Um-Sortieren

  Alt 19. Okt 2004, 22:28
Hallo Delphi freunde,


ich suche eine form, wie man die Positionen in ein Grid sortieren kann, zb wenn die letzte position ganz nach oben soll zb.

von
Pos, Artikel
1 Erdbeeren
2 Äpfel
3 Bannanen

auf
Pos, Artikel
1 Bannanen
2 Erdbeeren
3 Äpfel

Als DB benutze ich DBISAM.

Danke für die Hilfe
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Positionen Um-Sortieren

  Alt 21. Okt 2004, 00:15
Hallo rocksoft,

eine Möglichkeit wäre eine Abfrage an die DB, in der die Felder die gewünschte Reihenfolge haben. Du kannst aber auch im Datenbankgrid manuell die Überschrift anklicken und an eine neue Stelle ziehen. Das geht auch zur Design-Time. Öffne einfach die Tabelle im OI (Active auf True setzen). Dann klicke mit der rechten Maustaste auf das Grid und wähle Spalteneditor. Klicke dort auf das Feld "Alle Felder hinzufügen" (3. Button in der Schalterleiste). Jetzt kannst du die Reihenfolge durch Verschieben der Felder an die entsprechende Stelle dauerhaft vorgeben. Das bleibt auch nach Schließen der Tabelle im OI erhalten.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Positionen Um-Sortieren

  Alt 21. Okt 2004, 01:19
Hallo Albert,

Danke für deine Antwort ist aber nicht was ich gesucht habe, ich denke war nicht gerade gut beschrieben mein vorhaben , ich versuche die Artikel positionen, nach wunsch zu sortieren, mit zwei buttons (hoch und runter). Es kommt ja öfters vor das man in eine Rechnung 10 Artikel eingibt und dann merkt man, das der 5 Artikel besser in der zweite position past, jetzt muss ich alle Artikel löschen und neu eingeben so das die positionen stimmen, ist dann ein wenig nervig

Pos, Artikel
1, WindowsXp: Sollte Pos 5 werden
2, Maus
3, Tastatur
4, Monitor : Sollte Pos 1 werden
5, PC ZXY : Sollte Pos 2 werden

wie bekomme ich jetzt die Pos 4, Monitor auf Position 1 ?

Danke für die Hilfe
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Positionen Um-Sortieren

  Alt 21. Okt 2004, 02:53
Hallo rocksoft,

dann wäre es sinnvoll die Position als Feld in der Datenbank mitzuführen. Wenn du jetzt einen Button "Aktuelle Position nach oben" anklickst und die aktuelle Position ist z.B. 5, dann suchst du zunächst Pos4 z.B. über und verschiebst den Satz an eine Position, die du sonst nicht nutzt:

Delphi-Quellcode:
myTable.FindKey([4]);
myTable.Edit;
myTable.FieldByName('Pos').AsInteger := 9999;
myTable.Post;
Dann verschiebst du den alten 5er an die Position 4:
Delphi-Quellcode:
myTable.FindKey([5]);
myTable.Edit;
myTable.FieldByName('Pos').AsInteger := myTable.FieldByName('Pos').AsInteger-1;
myTable.Post;
und jetzt holst du den Datensatz von ganz hinten wieder:
Delphi-Quellcode:
myTable.FindKey([9999]);
myTable.Edit;
myTable.FieldByName('Pos').AsInteger := 5;
myTable.Post;
Wenn du jetzt noch vorher

myTable.DisableControls; und hinterher

myTable.EnableControls; aufrufst, sieht der Nutzer von der Verschiebung erst nachdem alles wieder richtig positioniert ist.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Positionen Um-Sortieren

  Alt 21. Okt 2004, 23:59
Hallo Albert,


Mensch darauf hätte ich selber drauf kommen können, leider geht es so nicht mit query, für Tables habe ich es jetzt so gemacht, für den fall das noch jemand interese daran hat, eventuell geht es noch eleganter aber laufen tut es schon mal.

Danke für die Hilfe

Delphi-Quellcode:
procedure TForm1.UpClick(Sender: TObject);
var
  CurrPos: integer;
begin
  myTable.DisableControls;
  CurrPos := myTable.FieldByName('Pos').AsInteger;
  try
    if CurrPos = 1 then exit;
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := 9999;
    myTable.Post;

    myTable.FindKey([CurrPos - 1]);
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := myTable.FieldByName('Pos').AsInteger + 1;
    myTable.Post;

    myTable.FindKey([9999]);
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := CurrPos - 1;
    myTable.Post;
  finally
    myTable.EnableControls;
  end;
end;

procedure TForm1.DownClick(Sender: TObject);
var
  CurrPos: integer;
begin
  myTable.DisableControls;
  CurrPos := myTable.FieldByName('Pos').AsInteger;
  try
    if CurrPos = PosTab.RecordCount then exit;
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := 9999;
    myTable.Post;

    myTable.FindKey([CurrPos + 1]);
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := myTable.FieldByName('Pos').AsInteger - 1;
    myTable.Post;

    myTable.FindKey([9999]);
    myTable.Edit;
    myTable.FieldByName('Pos').AsInteger := CurrPos + 1;
    myTable.Post;
  finally
    myTable.EnableControls;
  end;
end;
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Positionen Um-Sortieren

  Alt 31. Mai 2011, 12:51
Das funktioniert gut. Aber weiß jemand wie ich mehrere markierte Zeilen in der DBGrid gleichzeitig verschieben kann?
Also ich markiere in der DBGrid Zeile 5-8 und alle 4 Zeilen sollen gleichzeitig mit der obigen (oder einer anderen) methode verschoben werden.
Danke.

Geändert von BBoy (31. Mai 2011 um 12:55 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Positionen Um-Sortieren

  Alt 31. Mai 2011, 17:09
Sollte mit Hilfe von bookmarks funktionieren
Markus Kinzler
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Positionen Um-Sortieren

  Alt 3. Jun 2011, 13:55
Habe ein DBGrid und markiere da mehrere Zeilen in folge und die Markierten sollen dann mit jedem Buttonklick nach oben bzw. nach unten verschoben werden. Noch leiber wäre mir ja ein Drag&Drop per Maus. Aber das scheint ja noch viel schwieriger zu sein.

Bookmarks, ok dann hätte ich die selektierten. Aber wie kann ich das umsetzen? Ein paar Codezeilen würden mir da weiterhelfen da ich überhaupt keinen anstatz habe.
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Positionen Um-Sortieren

  Alt 5. Jun 2011, 15:15
Habe es nun so gelöst:

Delphi-Quellcode:
begin
  Table1.DisableControls;

for i := 0 to DBGrid2.SelectedRows.Count -1 do begin
    DBGrid2.DataSource.DataSet.GotoBookmark(Pointer(DBGrid2.SelectedRows.Items[i]));
    CurrPos := datamodule1.Table1.FieldByName('TourPos').AsInteger;
    if CurrPos = 1 then begin
      Table1.EnableControls;
      exit;
    end;
    datamodule1.Table1.Edit;
    datamodule1.Table1.FieldByName('TourPos').AsInteger := 9999;
    datamodule1.Table1.Post;
    datamodule1.Table1.FindKey([CurrPos - 1]);
    datamodule1.Table1.Edit;
    datamodule1.Table1.FieldByName('TourPos').AsInteger := Table1.FieldByName('TourPos').AsInteger + 1;
    datamodule1.Table1.Post;
    datamodule1.Table1.FindKey([9999]);
    datamodule1.Table1.Edit;
    datamodule1.Table1.FieldByName('TourPos').AsInteger := CurrPos - 1;
    datamodule1.Table1.Post;
end;
    Table1.EnableControls;
end;

Geändert von BBoy ( 5. Jun 2011 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:05 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