dbgrid 中想要移动行,比如把第6行移到第3行,ID替换成第3行的ID,其他行的ID不变,但其他的数据下移一行。同时保存到数据库中。
比如:
ID   NAME   MONEY
1    AA      10
4    BB       20
6    CC      13   ——————(第三行)
7    DD      10
8     EE      12
13    FF     5
102   44     9   ------------(第六行)
125  DE    8结果:
ID   NAME   MONEY
1    AA      10
4    BB       20
6  44     9   ------------(第六行)
7    CC      13   ——————(第三行)
8    DD      10
13    EE      12
102    FF     5
125  DE    8

解决方案 »

  1.   

    哦,好象不行`~~我也不知道了,帮你找了两段代码你自己看吧◇[DELPHI]产生鼠标拖动效果
    通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL:
    var xpanel,ypanel,xlabel,ylabel:integer;
    PANEL的MouseMove事件:xpanel:=x;ypanel:=y;
    PANEL的DragOver事件:xpanel:=x;ypanel:=y;
    LABEL的MouseMove事件:xlabel:=x;ylabel:=y;
    LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
    交换记录procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source = ListView1 then Accept:=True;
    end;procedure TForm1.ListView1EndDrag(Sender, Target: TObject; X, Y: Integer);
    var vItem,vItem1:TListItem;
    begin
      if (Sender = ListView1)and (ListView1.Selected<>nil) then
      begin
        vItem:=ListView1.GetItemAt(X,Y);
        if vItem<> nil then
        begin
          if vItem<>ListView1.Selected then
          begin
            vItem1:=ListView1.Selected;
            if vItem.Index<vItem1.Index then
              ListView1.Items.Insert(vItem.Index).Assign(vItem1)
            else
              ListView1.Items.Insert(vItem.Index+1).Assign(vItem1);
            ListView1.Items.Delete(vItem1.Index);
          end;
        end;
      end;
    end;
      

  2.   

    看看下面的代码可以吗?procedure TForm1.BitBtn1Click(Sender: TObject);
    var temp1,temp2:integer;
        book:Tbookstr;
    begin
        temp1:=adoquery1.fieldbyname('field1').AsInteger;
        adoquery1.Next;
         if not adoquery1.Eof then
        begin
         begin
            adoquery1.DisableControls;
              book:=adoquery1.Book;
            temp2:=adoquery1.fieldbyname('field1').AsInteger;
            adoquery1.Edit;
            adoquery1.fieldbyname('field1').AsInteger:=temp1;
            adoquery1.Post;
            adoquery1.Prior;
            end;
            adoquery1.Edit;
            adoquery1.fieldbyname('field1').AsInteger:=temp2;
            adoquery1.Post;
            adoquery1.Close;
            adoquery1.Open;
            adoquery1.Book:=book;
            adoquery1.EnableControls;
          end;
    end;