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[].Values[AOrderIndex];
- ASourceMaxOrderValue := AController.SelectedRows[AController.SelectedRowCount-].Values[AOrderIndex];
- ADataSet := ADataController.DataSet;
- AField := ADataSet.FieldByName('Order');
- IsUp := (ADestOrderValue < ASourceMinOrderValue);
- ADataSet.First;
- for I := to ADataSet.RecordCount - 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 + ;
- for I := to AController.SelectedRowCount - 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([, Controller.SelectedRecordCount - ], varVariant);
- for I := to Controller.SelectedRecordCount - 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 =
- Top =
- Caption = 'Form1'
- ClientHeight =
- ClientWidth =
- Color = clBtnFace
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -
- Font.Name = 'MS Sans Serif'
- Font.Style = []
- OldCreateOrder = False
- OnCreate = FormCreate
- PixelsPerInch =
- TextHeight =
- object cxGrid1: TcxGrid
- Left =
- Top =
- Width =
- Height =
- Align = alClient
- TabOrder =
- 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 =
- 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 =
- Top =
- Width =
- Height =
- Caption = 'Reset Order'
- TabOrder =
- OnClick = Button1Click
- end
- object DataSource1: TDataSource
- DataSet = Table1
- Left =
- Top =
- end
- object Table1: TTable
- DatabaseName = '.\'
- TableName = 'TestTable.db'
- Left =
- Top =
- object Table1ID: TAutoIncField
- FieldName = 'ID'
- ReadOnly = True
- end
- object Table1Order: TSmallintField
- FieldName = 'Order'
- end
- object Table1Text: TStringField
- FieldName = 'Text'
- Size =
- end
- end
- end
cxGrid_Q31584 cxgrid 拖放移动记录的更多相关文章
- Javascript - ExtJs - GridPanel组件
GridPanel组件(Ext.grid.GridPanel)logogram:Ext.grid.Panel | xtype:gridpanel 此类派生自Ext.Panel,创建表格需要两个必须的对 ...
- 跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)
跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增) 网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是 ...
- 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增
网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好“拖放”这个东西真是很难,特别是象我这样英语不好的人,看不太懂官网上的说明,做一 ...
- 关于Delphi cxGrid主从表中从表只能编辑第一条记录的问题
在Delphi cxGrid主从表中从表只能编辑第一条记录,这个问题是由于设置主从关联字段错误造成的. 从表DBtableView2的keyfieldnames,DetailKeyFieldNames ...
- cxGrid主从表删除从表记录的困惑
cxgrid主从表显示方便直观. varADetailDC: TcxGridDataController;AView: TcxCustomGridTableView; with cxgrdbndtbl ...
- 【html】学习记录-拖放(drag and drop)
目的:实现拖动目标并放置到指定区域. 使元素可拖动,涉及到元素的全局属性draggable <img draggable="true" /> 即img元素设置为可拖 ...
- ExpressQuantumGrid4的cxGrid的一些使用方法和经验
使用cxGrid有一些时间了,在这里总结一下使用cxGrid的一些方法,希望给刚开始接触cxGrid的人一些帮助. 1.简单介绍:cxGrid右下方的cxGrid1Level1是表示Grid表的层,c ...
- cxGrid的使用方法
来源 http://www.cnblogs.com/djcsch2001/archive/2010/07/19/1780573.html 1. 去掉GroupBy栏 cxGrid1DBTable ...
- Delphi CxGrid 汇总(2)
17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | ------------ ...
随机推荐
- ubuntu设置网络
二 .设置无线网络 1.首先确认一下你的无线驱动已经安装 方法一,查看一下ubuntu右上角的网络设置中有无线连接,如果有说明已经驱动了,ubuntu自带的就会驱动无线网卡. 方法二,iwconfig ...
- for、for in和while以及do while
for循环:一般用在已知判断条件的循环; for(变量初始化;循环条件判断;循环后的执行){ 代码块 } //变量初始化可以省略,但是分号不能省.有多个的话用逗号隔开 //循环条件判断是true还是f ...
- 面向对象的线程池Threadpool的封装
线程池是一种多线程处理形式,预先创建好一定数量的线程,将其保存于一个容器中(如vector), 处理过程中将任务添加到队列,然后从容器中取出线程后自动启动这些任务,具体实现如下. 以下是UML图,展示 ...
- Ubuntu 上查看硬件信息命令
1.Mint 驱动程序管理器是由 Linux Mint 团队开发的一款系统工具软件,使得用户在Linux系统中可容易安装专有驱动,通过一个直观的界面.由于 Mint 驱动程序管理器具有独立性,它支持所 ...
- grub2与grub区别
关于版本: GRUB2 使之版本号为1.98之后的grub:GRUB legacy(版本为0.97)是指GRUB,而非GRUB2,grub是指 grub1.97 和以前的,grub 2 指的是 gru ...
- Excel 2010高级应用-气泡图(八)
Excel 2010高级应用-气泡图(八) 基本操作如下: 1.新建空白文档,并命名为气泡图,找到插入中的气泡图样 2.在其他图表中找到气泡图图样 3.单击气泡图图样,生成空白气泡图框 4.在气泡图图 ...
- AM335x(TQ335x)学习笔记——USB驱动移植
对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...
- 双硬盘RAID 0全攻略
. RAID53 RAID7即高效数据传送磁盘结构,是RAID3和带区结构的统一,因此它速度比较快,也有容错功能.但价格十分高,不易于实现. 为什么需要磁盘阵列 如何增加磁盘的存取(ac ...
- Linux显示查看您拥有的仓库
Linux显示查看您拥有的仓库 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ yum repolist all repolist: 0
- 安装使用pyclone进行克隆演化推断
pyclone介绍 可以根据多个样品突变的allele frequency 和 copy number,推断出有该突变的细胞克隆所占的比例(cellular prevalence)在不同样品间的变 ...