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 拖放移动记录的更多相关文章

  1. Javascript - ExtJs - GridPanel组件

    GridPanel组件(Ext.grid.GridPanel)logogram:Ext.grid.Panel | xtype:gridpanel 此类派生自Ext.Panel,创建表格需要两个必须的对 ...

  2. 跟我一起学extjs5(19--模块记录的拖放删除、拖放复制新增)

    跟我一起学extjs5(19--模块记录的拖放删除.拖放复制新增)         网页其中的拖放(drag-drop)是比較有趣的操作,extjs5中非常好的封装了拖放的动作,也有各种类来支持,可是 ...

  3. 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增

    网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好“拖放”这个东西真是很难,特别是象我这样英语不好的人,看不太懂官网上的说明,做一 ...

  4. 关于Delphi cxGrid主从表中从表只能编辑第一条记录的问题

    在Delphi cxGrid主从表中从表只能编辑第一条记录,这个问题是由于设置主从关联字段错误造成的. 从表DBtableView2的keyfieldnames,DetailKeyFieldNames ...

  5. cxGrid主从表删除从表记录的困惑

    cxgrid主从表显示方便直观. varADetailDC: TcxGridDataController;AView: TcxCustomGridTableView; with cxgrdbndtbl ...

  6. 【html】学习记录-拖放(drag and drop)

    目的:实现拖动目标并放置到指定区域.   使元素可拖动,涉及到元素的全局属性draggable <img draggable="true" /> 即img元素设置为可拖 ...

  7. ExpressQuantumGrid4的cxGrid的一些使用方法和经验

    使用cxGrid有一些时间了,在这里总结一下使用cxGrid的一些方法,希望给刚开始接触cxGrid的人一些帮助. 1.简单介绍:cxGrid右下方的cxGrid1Level1是表示Grid表的层,c ...

  8. cxGrid的使用方法

    来源 http://www.cnblogs.com/djcsch2001/archive/2010/07/19/1780573.html   1.  去掉GroupBy栏 cxGrid1DBTable ...

  9. Delphi CxGrid 汇总(2)

    17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | ------------ ...

随机推荐

  1. 《android开发艺术探索》读书笔记(八)--WindowManager

    接上篇<android开发艺术探索>读书笔记(七)--动画 No1: Window是一个抽象类,它的具体实现是PhoneWindow.创建一个Window是很简单的事,只需要通过Windo ...

  2. UVA - 242 线性DP

    题意:给定多种邮票的组合,邮票最多只能用S张,这些邮票能组成许多不同面额,问最大连续面额的长度是多少,如果有多个组合输出组合中邮票数量最少的,如果仍有长度一致的,输出邮票从大到小排序后字典序最大的那个 ...

  3. nginx启动停止

    nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件 nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...

  4. MFC 多线程及线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

  5. 大数据处理的三种框架:Storm,Spark和Samza

    许多分布式计算系统都可以实时或接近实时地处理大数据流.下面对三种Apache框架分别进行简单介绍,然后尝试快速.高度概述其异同. Apache Storm 在Storm中,先要设计一个用于实时计算的图 ...

  6. JDBC异常之数据库表不存在

    JDBC异常之数据库表不存在 1.具体错误如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Table 'YHD.t_yhd_ ...

  7. 下载jQuery EasyUI出现网络问题

    下载jQuery EasyUI出现网络问题 1.具体错误如下 错误 137 (net::ERR_NAME_RESOLUTION_FAILED):未知错误 2.错误原因 由于DNS配置出现问题,导致该网 ...

  8. Caused by: Unable to locate parent package [json-default] for [class com.you.user.action.StudentActi

    1.错误描述 信息: Choosing bean (struts) for (com.opensymphony.xwork2.util.TextParser) 2014-7-13 1:52:04 or ...

  9. java 的八大排序

    import java.util.Arrays;import java.util.*; public class Sort { /** * 插入排序 */ public static void ins ...

  10. WPF自学入门(三)WPF路由事件之内置路由事件

    有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...