DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Virtuális pálesz + sör Gábornak!

- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Végül is úgy jobb lett ahogy Gábor javasolta!
És lám jó lett!
Köszi!
//adatmodulban
var
BufDataSet1: TBufDataset;
....
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
BufDataSet1 := TBufDataset.Create(nil);
BufDataSet1.FieldDefs.Add('ID', ftInteger,3);
BufDataSet1.FieldDefs.Add('FIELDKOD',ftString,13);
BufDataSet1.FieldDefs.Add('FIELDNEV',ftString,50);
BufDataSet1.IndexFieldNames:='ID';
BufDataSet1.CreateDataset;
MemDataSource1.DataSet:= BufDataSet1;
end;
//unit1-ben
var szamlalo: integer = 0;
//DBGrid aktuális elemét másolom át a BufDataSet-be
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
BufDataset1.Append;
inc(szamlalo);
BufDataset1.Fields.Fields[0].Value:= szamlalo;
BufDataset1.Fields.Fields[1].Value:= DataModule1.ZTableCKT.FieldByName('CKTKOD').Value;
BufDataset1.Fields.Fields[2].Value:= DataModule1.ZTableCKT.FieldByName('CKTNEV').Value;
BufDataset1.Post;
end;
//felfelé mozgatás
procedure TForm1.ButtonFelClick(Sender: TObject);
var temp1, temp2: integer;
begin
temp1:= BufDataSet1.FieldByName('ID').Value;
BufDataSet1.Prior;
temp2:= BufDataSet1.FieldByName('ID').Value;
if BufDataSet1.BOF then
exit
else
begin
BufDataSet1.Edit;
BufDataSet1.FieldByName('ID').Value:= temp1;
BufDataSet1.Post;
BufDataSet1.Next;
BufDataSet1.Edit;
BufDataSet1.FieldByName('ID').Value:= temp2;
BufDataSet1.Post;
end;
end;
//lefelé mozgatás
procedure TForm1.ButtonLeClick(Sender: TObject);
var temp1, temp2: integer;
begin
temp1:= BufDataSet1.FieldByName('ID').Value;
BufDataSet1.Next;
temp2:= BufDataSet1.FieldByName('ID').Value;
if BufDataSet1.EOF then
exit
else
begin
BufDataSet1.Edit;
BufDataSet1.FieldByName('ID').Value:= temp1;
BufDataSet1.Post;
BufDataSet1.Prior;
BufDataSet1.Edit;
BufDataSet1.FieldByName('ID').Value:= temp2;
BufDataSet1.Post;
end;
end;
És lám jó lett!
Köszi!
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Kicsit ágyuval verébre lövős lett.
Lehet Gábornak van igaza és index oszlopot kellene használni..., és másolgatni az indexet?
Majd kipróbálom úgy is....
Lehet Gábornak van igaza és index oszlopot kellene használni..., és másolgatni az indexet?
Majd kipróbálom úgy is....
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Sokat filóztam, mit kéne tenni.
Hát elég érdekesen oldottam meg a dolgot, de működik!
Létrehoztam még egy MemDataSet komponenst TempMemDataset néven aminek 2 sort hozok létre induláskor és ezekbe másolgatok.
Nem tudom, hogy kevesebb lépésből meg lehet e csinálni egyszerübben, de egyenlőre a feladatát elvégzi.
Persze nem jó minden táblára..., de ha van egyszerübb általános megoldás, akkor érdekel!
Hát elég érdekesen oldottam meg a dolgot, de működik!
Létrehoztam még egy MemDataSet komponenst TempMemDataset néven aminek 2 sort hozok létre induláskor és ezekbe másolgatok.
//adatmodulban
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
TempMemDataset.Append;
TempMemDataset.Fields.Fields[0].Value:= '';
TempMemDataset.Fields.Fields[1].Value:= '';
TempMemDataset.Post;
TempMemDataset.Append;
TempMemDataset.Fields.Fields[0].Value:= '';
TempMemDataset.Fields.Fields[1].Value:= '';
TempMemDataset.Post;
end;
//unit1-ben
procedure TForm1.ButtonFelClick(Sender: TObject);
begin
DataModule1.TempMemDataset.First; //temp első record
DataModule1.TempMemDataset.Edit; //szerkeszt, az aktuális rekord másol ide
DataModule1.TempMemDataset.Fields.Fields[0].Value:= DataModule1.MemDataset1.FieldByName('FIELDKOD').Value;
DataModule1.TempMemDataset.Fields.Fields[1].Value:= DataModule1.MemDataset1.FieldByName('FIELDNEV').Value;
DataModule1.TempMemDataset.post;
DataModule1.MemDataset1.Prior; //aktuális előttire áll
if (DataModule1.MemDataset1.BOF <> true) then
begin
DataModule1.TempMemDataset.Next; //temp másodikra áll
DataModule1.TempMemDataset.Edit; //másolás
DataModule1.TempMemDataset.Fields.Fields[0].Value:= DataModule1.MemDataset1.FieldByName('FIELDKOD').Value;
DataModule1.TempMemDataset.Fields.Fields[1].Value:= DataModule1.MemDataset1.FieldByName('FIELDNEV').Value;
DataModule1.TempMemDataset.post;
DataModule1.TempMemDataset.First;
DataModule1.MemDataset1.Edit;
DataModule1.MemDataset1.Fields.Fields[0].Value:= DataModule1.TempMemDataset.FieldByName('TEMPKOD').Value;
DataModule1.MemDataset1.Fields.Fields[1].Value:= DataModule1.TempMemDataset.FieldByName('TEMPNEV').Value;
DataModule1.MemDataset1.Post;
DataModule1.MemDataset1.next;
DataModule1.TempMemDataset.Next;
DataModule1.MemDataset1.Edit;
DataModule1.MemDataset1.Fields.Fields[0].Value:= DataModule1.TempMemDataset.FieldByName('TEMPKOD').Value;
DataModule1.MemDataset1.Fields.Fields[1].Value:= DataModule1.TempMemDataset.FieldByName('TEMPNEV').Value;
DataModule1.MemDataset1.Post;
DataModule1.MemDataset1.Prior;
end;
end;
procedure TForm1.ButtonLeClick(Sender: TObject);
begin
DataModule1.TempMemDataset.First; //temp első record
DataModule1.TempMemDataset.Edit; //szerkeszt, az aktuális rekord másol ide
DataModule1.TempMemDataset.Fields.Fields[0].Value:= DataModule1.MemDataset1.FieldByName('FIELDKOD').Value;
DataModule1.TempMemDataset.Fields.Fields[1].Value:= DataModule1.MemDataset1.FieldByName('FIELDNEV').Value;
DataModule1.TempMemDataset.post;
DataModule1.MemDataset1.Next; //aktuális utánira áll
if (DataModule1.MemDataset1.EOF <> true) then
begin
DataModule1.TempMemDataset.Next; //temp másodikra áll
DataModule1.TempMemDataset.Edit; //másolás
DataModule1.TempMemDataset.Fields.Fields[0].Value:= DataModule1.MemDataset1.FieldByName('FIELDKOD').Value;
DataModule1.TempMemDataset.Fields.Fields[1].Value:= DataModule1.MemDataset1.FieldByName('FIELDNEV').Value;
DataModule1.TempMemDataset.post;
DataModule1.MemDataset1.Prior;
DataModule1.MemDataset1.Edit;
DataModule1.MemDataset1.Fields.Fields[0].Value:= DataModule1.TempMemDataset.FieldByName('TEMPKOD').Value;
DataModule1.MemDataset1.Fields.Fields[1].Value:= DataModule1.TempMemDataset.FieldByName('TEMPNEV').Value;
DataModule1.MemDataset1.Post;
DataModule1.MemDataset1.next;
DataModule1.TempMemDataset.First;
DataModule1.MemDataset1.Edit;
DataModule1.MemDataset1.Fields.Fields[0].Value:= DataModule1.TempMemDataset.FieldByName('TEMPKOD').Value;
DataModule1.MemDataset1.Fields.Fields[1].Value:= DataModule1.TempMemDataset.FieldByName('TEMPNEV').Value;
DataModule1.MemDataset1.Post;
end;
end;
Nem tudom, hogy kevesebb lépésből meg lehet e csinálni egyszerübben, de egyenlőre a feladatát elvégzi.
Persze nem jó minden táblára..., de ha van egyszerübb általános megoldás, akkor érdekel!
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Kipróbálom és jelentkezem!
Köszi!
Köszi!
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 436
- Karma: 8
- Köszönetek: 70
Gábor válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Szia!
Javaslom, hogy a TMemDataset helyett használj TBufDataset komponenst, amivel megoldható az indexelés (TBufDataSet.IndexFieldNames)
Egy extra 'sorrend' oszlop hozzáadása és az indexelés alapjaként történő megadása után, annak értékét változtatva, a sorrend a táblázatban is változik... elvileg.
Most szűkösen vagyok idővel ezért nem tudtam tesztelni az elgondolásomat.
Javaslom, hogy a TMemDataset helyett használj TBufDataset komponenst, amivel megoldható az indexelés (TBufDataSet.IndexFieldNames)
Egy extra 'sorrend' oszlop hozzáadása és az indexelés alapjaként történő megadása után, annak értékét változtatva, a sorrend a táblázatban is változik... elvileg.
Most szűkösen vagyok idővel ezért nem tudtam tesztelni az elgondolásomat.
Megköszönték: progmokus
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus válaszolt a témára: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Gondolom, hogy a DBGrid alatt a MemDataSet elemeit kell mozgatni, csak még nem jöttem rá hogyan.
A MemDataSet.Prior és a Next az csak visszább vagy előrébb megy egy rekorddal.
Az aktuális rekordnak van valami dataset beli indexe?
A MemDataSet.Prior és a Next az csak visszább vagy előrébb megy egy rekorddal.
Az aktuális rekordnak van valami dataset beli indexe?
- progmokus
-
- Új fórumozó
-
- Hozzászólások: 14
- Köszönetek: 0
progmokus létrehozta a témát: DBGrid kijelölt elemének egyel fel vagy egyel le mozgatása
Sziasztok!
Egy DBGrid kijelölt sorát szeretném gombnyomásra egyel fel vagy másik gombra le mozgatni.
A DBGrid egy MemDataSet-hez van kapcsolva amibe összekattintgattam más datasetekből sorokat.
10-30 sor is összejöhet és néha valamelyik sort előrébb vagy hátrébb kellene rakni. A dataset nincs rendezve, nem is kell, akciós élelmiszerlista lenne, minden napra egy sor, ezért nem jó rendezett lista.
Nem birtam rájönni hogy lehet elemeket felcserélni vagy csak nem látom a fától az erdőt....
Ötletek jöhetnek, köszike!
Egy DBGrid kijelölt sorát szeretném gombnyomásra egyel fel vagy másik gombra le mozgatni.
A DBGrid egy MemDataSet-hez van kapcsolva amibe összekattintgattam más datasetekből sorokat.
10-30 sor is összejöhet és néha valamelyik sort előrébb vagy hátrébb kellene rakni. A dataset nincs rendezve, nem is kell, akciós élelmiszerlista lenne, minden napra egy sor, ezért nem jó rendezett lista.
Nem birtam rájönni hogy lehet elemeket felcserélni vagy csak nem látom a fától az erdőt....
Ötletek jöhetnek, köszike!