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 | ------------ ...
随机推荐
- CodeForces-731B
如果当天有m支队伍,昨天选择了k个B方案,那么今天还需要买m-k个披萨,如果m-k是奇数,那就先买一种B,剩下的全部买A,如果是偶数,全部买A.如果中途出现只有0支队伍,然而昨天却买了一次B,那么直接 ...
- scrapy 中日志的使用
我在后台调试 在后台调试scrapy spider的时候,总是觉得后台命令窗口 打印的东西太多了不便于观察日志,因此需要一个日志文件记录信息,这样以后会 方便查找问题. 分两种方法吧. 1.简单粗暴. ...
- HttpClient调用RestFul接口(post和get方式)
/** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...
- php simpleXML操作xml的用法
XML简介 XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交 ...
- phpcmsv9更换模板介绍
先分享下大概的步骤: 1.上传模版文件到服务器:2.在站点管理 里边[模板风格配置]选择新模板:3.设置不同模型对应模板:4.修改现有的栏目,匹配新模板:5.更新栏目缓存.系统缓存,更新HTML静态页 ...
- 部署Java Web项目报错(二)
在编写HighCharts折线时,并且数据源是请求CSV,运行项目时出现错误 Uncaught TypeError: Cannot read property 'prototype' of undef ...
- 如何利用JavaScript遍历JSON数组
1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- HDU5779 Tower Defence
dp[i][j][k] 已选i个人 选到第j层 第j层有k个人 讨论相邻层 上一层选了l人 那么共有 两层之间的方案数 以及这一层自己的方案数 #include<bits/stdc++.h&g ...
- 支持行单击、双击事件的GridView和DataList控件(译)
支持行单击.双击事件的GridView和DataList控件(译) 让GridView 和 DataList 控件响应鼠标单击.双击事件.并且,使用 ClientScript.Regi ...
- 初识SSO与JWT
以前在学校做项目的时候,登录注销,权限验证这些事情,都是交给框架来做的,每次都是把这个架子拿到项目中去,也没有真正思考过它的过程,总觉的这些都是十分简单的逻辑. 然而来公司工作之后,慢慢觉得登录和权限 ...