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
  • 相关阅读:
    BSGS模板(互质与不互质) 洛谷P4195、P3846
    整除分块(数论分块)
    洛谷P3327 [SDOI2015]约数个数和——莫比乌斯反演
    模块二
    模块
    二分法 匿名函数
    3.26作业
    函数的递归调用
    yield表达式 三元表达式
    3.25作业
  • 原文地址:https://www.cnblogs.com/zhqian/p/7201637.html
Copyright © 2011-2022 走看看