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 | ------------ ...
随机推荐
- IS-IS 路由协议 总结
第一章 is-is的协议概述 1. 发展史 Is-is最早是iso为osi模型中CLNP而设计的协议,后来根据发展需要,也支持了TCP/IP协议,因此,is-is叫做integrated is-is或 ...
- VUE PK REACT(1)
一.浏览器兼容性 vue: ie9+ react: ie8+ 二.安装使用 vue:1.直接引入 <script src="https://cdn.jsdelivr.net/npm/ ...
- 基于Jenkins+Git+Gradle的Android持续集成
本文参考了: http://my.oschina.net/uboluo/blog/157483 http://java.dzone.com/articles/automating-continuous ...
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
4 任务与任务状态 VxWorks实时内核Wind提供了基本的多任务环境.对用户而言,宏观上看起来,多个任务同时在执行.而本质而言,在微观上,系统内核中的任务调度器总是在根据特定的调度策略让它们交替运 ...
- XmlDocument 转换为xml字符串
static public string XMLDocumentToString(XmlDocument doc) { MemoryStream stream = new Me ...
- FtpHelper ftp操作类库
FtpHelper ftp操作类库 using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- 获取MySql每一列的数据类型和长度默认值等信息
如何获取MySql表中各个列的数据类型? show columns from tablename 返回结果如下: id int(11) NO PRI auto_incr ...
- Keras官方中文文档:keras后端Backend
所属分类:Keras Keras后端 什么是"后端" Keras是一个模型级的库,提供了快速构建深度学习网络的模块.Keras并不处理如张量乘法.卷积等底层操作.这些操作依赖于某种 ...
- 【BZOJ1499】瑰丽华尔兹(动态规划)
[BZOJ1499]瑰丽华尔兹(动态规划) 题面 BZOJ 题解 先写部分分 设\(f[t][i][j]\)表示当前在\(t\)时刻,位置在\(i,j\)时走的最多的步数 这样子每一步要么停要么走 时 ...
- NOIP2017+停课总结
注意 此文章禁止一切含虚伪内容的评论,违者删除评论 其删除解释权归博主所有 Part1 论yyb NOIP 如何炸裂 前言 离NOIP已有三个星期,忘却的救主快要降临了吧,我正有写一篇总结的必要了.. ...