zoukankan      html  css  js  c++  java
  • cxGrid_Q31584 cxgrid 拖放移动记录

    cxgrid 拖放移动记录,cxgrid 拖放,cxgrid 拖动记录,cxgrid 鼠标拖动记录 这是cxgrid开发公司回复客户时所发送的源码项目,用于实现鼠标拖动记录,改变记录在表格中的位置,所以直接编译运行,供大家借鉴 

    问题地址:https://www.devexpress.com/Support/Center/Question/Details/Q31584/help-with-drag-and-drop-in-cxgrid-reorder-rows

     下载地址:https://www.devexpress.com/Support/Center/Attachment/GetAttachmentFile/e1b941a6-feb1-413e-b7e1-b1c1eece12be

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
      cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView,
      cxGridTableView, cxGridDBTableView, DBTables, cxGridLevel, cxClasses,
      cxControls, cxGridCustomView, cxGrid, dxSkinsCore,  StdCtrls;
    
    type
      TForm1 = class(TForm)
        cxGrid1: TcxGrid;
        cxGrid1DBTableView1: TcxGridDBTableView;
        cxGrid1Level1: TcxGridLevel;
        DataSource1: TDataSource;
        Table1: TTable;
        cxGrid1DBTableView1ID: TcxGridDBColumn;
        cxGrid1DBTableView1Order: TcxGridDBColumn;
        cxGrid1DBTableView1Text: TcxGridDBColumn;
        Table1ID: TAutoIncField;
        Table1Order: TSmallintField;
        Table1Text: TStringField;
        Button1: TButton;
        procedure cxGrid1DBTableView1DragOver(Sender, Source: TObject; X,
          Y: Integer; State: TDragState; var Accept: Boolean);
        procedure cxGrid1DBTableView1DragDrop(Sender, Source: TObject; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
        procedure cxGrid1DBTableView1StartDrag(Sender: TObject;
          var DragObject: TDragObject);
        procedure Button1Click(Sender: TObject);
      private
        AKeys: Variant;
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.cxGrid1DBTableView1DragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    var
      HT: TcxCustomGridHitTest;
    begin
      with TcxGridSite(Sender) do
      begin
        HT := ViewInfo.GetHitTest(X, Y);
        Accept := (HT is TcxGridRecordCellHitTest) and (TcxGridRecordCellHitTest(HT).GridRecord.RecordIndex <> GridView.DataController.FocusedRecordIndex)
      end;
    end;
    
    procedure TForm1.cxGrid1DBTableView1DragDrop(Sender, Source: TObject; X,
      Y: Integer);
    var
      HT: TcxCustomGridHitTest;
      ASourceMinOrderValue,ASourceMaxOrderValue,ADestOrderValue: Variant;
      I: Integer;
      AController : TcxGridTableController;
      AOrderIndex : Integer;
      ADataSet : TDataset;
      AField : TField;
      IsUp : boolean;
      ADataController :  TcxDBDataController;
    begin
      AOrderIndex := cxGrid1DBTableView1Order.Index;
      with TcxGridSite(Sender) do
      begin
        HT := ViewInfo.GetHitTest(X, Y);
        ADestOrderValue := TcxGridRecordCellHitTest(HT).GridRecord.Values[AOrderIndex];
        AController := TcxGridTableController(GridView.Controller);
        ADataController :=  TcxDBDataController(GridView.DataController);
        ASourceMinOrderValue := AController.SelectedRows[0].Values[AOrderIndex];
        ASourceMaxOrderValue := AController.SelectedRows[AController.SelectedRowCount-1].Values[AOrderIndex];
        ADataSet :=  ADataController.DataSet;
        AField := ADataSet.FieldByName('Order');
        IsUp := (ADestOrderValue < ASourceMinOrderValue);
    
        ADataSet.First;
        for I := 0 to ADataSet.RecordCount - 1 do
        begin
          ADataSet.Edit;
          if IsUp and (AField.AsInteger >= ADestOrderValue) and (AField.AsInteger < ASourceMinOrderValue) then
            AField.AsInteger := AField.AsInteger + AController.SelectedRowCount;
          if not IsUp and (AField.AsInteger <= ADestOrderValue) and (AField.AsInteger > ASourceMaxOrderValue) then
              AField.AsInteger := AField.AsInteger - AController.SelectedRowCount;  
          ADataSet.Post;
          ADataSet.Next;
        end;
     
        if Not IsUp then
          ADestOrderValue := ADestOrderValue - AController.SelectedRowCount + 1; 
    
        for I := 0 to AController.SelectedRowCount - 1 do
        begin
          TcxDBDataController(GridView.DataController).LocateByKey(AKeys[I]);
          ADataset.Edit;
          AField.Value := ADestOrderValue + I;
          ADataset.Post;
        end;
    
      end;
    end;
    
    
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Table1.Open;
    end;
    
    
    
    procedure TForm1.cxGrid1DBTableView1StartDrag(Sender: TObject;
      var DragObject: TDragObject);
    var
      I: Integer;
    begin
      with TcxGridDBTableView(TcxGridSite(Sender).GridView) do
      begin
        AKeys := VarArrayCreate([0, Controller.SelectedRecordCount - 1], varVariant);
        for I := 0 to Controller.SelectedRecordCount - 1 do
          AKeys[I] := Controller.SelectedRecords[I].Values[cxGrid1DBTableView1ID.Index];
      end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with Table1 do
      begin
        DisableControls;
        try
          First;
          while not Eof do
          begin
            Edit;
            FieldValues['Order'] := FieldValues['ID']; 
            Next;
          end;
        finally
          EnableControls;
        end;
      end;
    end;
    
    end.

    DFM

    object Form1: TForm1
      Left = 438
      Top = 141
      Caption = 'Form1'
      ClientHeight = 430
      ClientWidth = 465
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object cxGrid1: TcxGrid
        Left = 0
        Top = 0
        Width = 465
        Height = 430
        Align = alClient
        TabOrder = 0
        object cxGrid1DBTableView1: TcxGridDBTableView
          DragMode = dmAutomatic
          OnDragDrop = cxGrid1DBTableView1DragDrop
          OnDragOver = cxGrid1DBTableView1DragOver
          OnStartDrag = cxGrid1DBTableView1StartDrag
          NavigatorButtons.ConfirmDelete = False
          DataController.DataSource = DataSource1
          DataController.KeyFieldNames = 'ID'
          DataController.Summary.DefaultGroupSummaryItems = <>
          DataController.Summary.FooterSummaryItems = <>
          DataController.Summary.SummaryGroups = <>
          OptionsSelection.CellSelect = False
          OptionsSelection.MultiSelect = True
          object cxGrid1DBTableView1ID: TcxGridDBColumn
            DataBinding.FieldName = 'ID'
            Options.Sorting = False
          end
          object cxGrid1DBTableView1Order: TcxGridDBColumn
            DataBinding.FieldName = 'Order'
            Options.Sorting = False
            SortIndex = 0
            SortOrder = soAscending
          end
          object cxGrid1DBTableView1Text: TcxGridDBColumn
            DataBinding.FieldName = 'Text'
            Options.Sorting = False
          end
        end
        object cxGrid1Level1: TcxGridLevel
          GridView = cxGrid1DBTableView1
        end
      end
      object Button1: TButton
        Left = 360
        Top = 48
        Width = 75
        Height = 25
        Caption = 'Reset Order'
        TabOrder = 1
        OnClick = Button1Click
      end
      object DataSource1: TDataSource
        DataSet = Table1
        Left = 80
        Top = 144
      end
      object Table1: TTable
        DatabaseName = '.'
        TableName = 'TestTable.db'
        Left = 33
        Top = 144
        object Table1ID: TAutoIncField
          FieldName = 'ID'
          ReadOnly = True
        end
        object Table1Order: TSmallintField
          FieldName = 'Order'
        end
        object Table1Text: TStringField
          FieldName = 'Text'
          Size = 25
        end
      end
    end
  • 相关阅读:
    关于网络调试助手
    阿里云之设备连接方法学习
    阿里云学习
    Jquery ThickBox的使用
    推荐几款制作网页滚动动画的 JavaScript 库
    Javascript动态操作CSS总结
    css3动画属性系列之transform细讲scale缩放
    JS函数重载解决方案
    从Java开发者的视角解释JavaScript
    理解JavaScript中的事件路由冒泡过程及委托代理机制
  • 原文地址:https://www.cnblogs.com/zhqian/p/7201637.html
Copyright © 2011-2022 走看看