![]() |
Positionen Um-Sortieren
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 |
Re: Positionen Um-Sortieren
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. |
Re: Positionen Um-Sortieren
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 |
Re: Positionen Um-Sortieren
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:
Dann verschiebst du den alten 5er an die Position 4:
myTable.FindKey([4]);
myTable.Edit; myTable.FieldByName('Pos').AsInteger := 9999; myTable.Post;
Delphi-Quellcode:
und jetzt holst du den Datensatz von ganz hinten wieder:
myTable.FindKey([5]);
myTable.Edit; myTable.FieldByName('Pos').AsInteger := myTable.FieldByName('Pos').AsInteger-1; myTable.Post;
Delphi-Quellcode:
Wenn du jetzt noch vorher
myTable.FindKey([9999]);
myTable.Edit; myTable.FieldByName('Pos').AsInteger := 5; myTable.Post;
Delphi-Quellcode:
und hinterher
myTable.DisableControls;
Delphi-Quellcode:
aufrufst, sieht der Nutzer von der Verschiebung erst nachdem alles wieder richtig positioniert ist.
myTable.EnableControls;
|
Re: Positionen Um-Sortieren
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; |
AW: Positionen Um-Sortieren
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. |
AW: Positionen Um-Sortieren
Sollte mit Hilfe von bookmarks funktionieren
|
AW: Positionen Um-Sortieren
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. |
AW: Positionen Um-Sortieren
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz