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
  • 相关阅读:
    扩展JSON
    字符串格式化---- String.prototype.format
    HigntChats应用举例--报表
    django Form组件之解决数据无法动态显示之BUG----以博客园添加新随笔页为主
    报错:jquery3.1.1报错Uncaught TypeError: a.indexOf is not a function
    HDU 6166 Senior Pan(多校第九场 二进制分组最短路)
    HDU 6069 Counting Divisors(区间素数筛法)
    hdu 6058 Kanade's sum (计算贡献,思维)
    HDU 6052 To my boyfriend(容斥+单调栈)
    HDU 6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场
  • 原文地址:https://www.cnblogs.com/zhqian/p/7201637.html
Copyright © 2011-2022 走看看