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. Markdown语法你都会了吗?

    关于Markdown,它可以说是程序员公认最好的文档语言了,没有之一!我相信经常写文章或者开发文档的大佬们都对其能生成简洁.大方.雅观的文档都深有体会,它的强大是毋庸置疑的.它编写的文档不但能生成ht ...

  2. 微信Token小识

    在调用自定义菜单接口的时候,调用接口 https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN返回: " ...

  3. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

    xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  4. C# 枚举特性 FlagAttribute 的应用

    写在前面 枚举Enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型.可以看出枚举的出现时为了使我们可以在程序中方便的使用一些特定值的常量,一般的使用大家都比较熟 ...

  5. ioctl,unlocked_ioctl 处理方法

    kernel 2.6.35 及之前的版本中struct file_operations 一共有3个ioctl : ioctl,unlocked_ioctl和compat_ioctl 现在只有unloc ...

  6. PL/SQL NOCOPY限制模式

    NOCOPY模式用于限定OUT模式和IN OUT模式在调用时是不是以传引用的方式进行. 默认情况下,OUT模式和IN OUT模式的参数是以传值的方式进行调用的. IN模式总是以传引用的方式,如果用NO ...

  7. freemarker报错之五

    1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Lexical e ...

  8. VC++信息安全编程(13)Windows2000/xp/vista/7磁盘扇区读写技术

    有些时候,我们读取磁盘文件,会被hook.我们读到的可能并非实际的文件. 我们直接读取磁盘扇区获取数据. 实现磁盘数据的读写,不依赖WindowsAPI. [cpp] view plaincopy v ...

  9. jQuery.extend 函数使用详解

    JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解.      一.Jquery的扩展方 ...

  10. CSS3 column属性

    css3 column属性的应用 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta c ...