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

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  8. cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView,
  9. cxGridTableView, cxGridDBTableView, DBTables, cxGridLevel, cxClasses,
  10. cxControls, cxGridCustomView, cxGrid, dxSkinsCore, StdCtrls;
  11.  
  12. type
  13. TForm1 = class(TForm)
  14. cxGrid1: TcxGrid;
  15. cxGrid1DBTableView1: TcxGridDBTableView;
  16. cxGrid1Level1: TcxGridLevel;
  17. DataSource1: TDataSource;
  18. Table1: TTable;
  19. cxGrid1DBTableView1ID: TcxGridDBColumn;
  20. cxGrid1DBTableView1Order: TcxGridDBColumn;
  21. cxGrid1DBTableView1Text: TcxGridDBColumn;
  22. Table1ID: TAutoIncField;
  23. Table1Order: TSmallintField;
  24. Table1Text: TStringField;
  25. Button1: TButton;
  26. procedure cxGrid1DBTableView1DragOver(Sender, Source: TObject; X,
  27. Y: Integer; State: TDragState; var Accept: Boolean);
  28. procedure cxGrid1DBTableView1DragDrop(Sender, Source: TObject; X,
  29. Y: Integer);
  30. procedure FormCreate(Sender: TObject);
  31. procedure cxGrid1DBTableView1StartDrag(Sender: TObject;
  32. var DragObject: TDragObject);
  33. procedure Button1Click(Sender: TObject);
  34. private
  35. AKeys: Variant;
  36. { Private declarations }
  37. public
  38. { Public declarations }
  39. end;
  40.  
  41. var
  42. Form1: TForm1;
  43.  
  44. implementation
  45.  
  46. {$R *.dfm}
  47.  
  48. procedure TForm1.cxGrid1DBTableView1DragOver(Sender, Source: TObject; X,
  49. Y: Integer; State: TDragState; var Accept: Boolean);
  50. var
  51. HT: TcxCustomGridHitTest;
  52. begin
  53. with TcxGridSite(Sender) do
  54. begin
  55. HT := ViewInfo.GetHitTest(X, Y);
  56. Accept := (HT is TcxGridRecordCellHitTest) and (TcxGridRecordCellHitTest(HT).GridRecord.RecordIndex <> GridView.DataController.FocusedRecordIndex)
  57. end;
  58. end;
  59.  
  60. procedure TForm1.cxGrid1DBTableView1DragDrop(Sender, Source: TObject; X,
  61. Y: Integer);
  62. var
  63. HT: TcxCustomGridHitTest;
  64. ASourceMinOrderValue,ASourceMaxOrderValue,ADestOrderValue: Variant;
  65. I: Integer;
  66. AController : TcxGridTableController;
  67. AOrderIndex : Integer;
  68. ADataSet : TDataset;
  69. AField : TField;
  70. IsUp : boolean;
  71. ADataController : TcxDBDataController;
  72. begin
  73. AOrderIndex := cxGrid1DBTableView1Order.Index;
  74. with TcxGridSite(Sender) do
  75. begin
  76. HT := ViewInfo.GetHitTest(X, Y);
  77. ADestOrderValue := TcxGridRecordCellHitTest(HT).GridRecord.Values[AOrderIndex];
  78. AController := TcxGridTableController(GridView.Controller);
  79. ADataController := TcxDBDataController(GridView.DataController);
  80. ASourceMinOrderValue := AController.SelectedRows[].Values[AOrderIndex];
  81. ASourceMaxOrderValue := AController.SelectedRows[AController.SelectedRowCount-].Values[AOrderIndex];
  82. ADataSet := ADataController.DataSet;
  83. AField := ADataSet.FieldByName('Order');
  84. IsUp := (ADestOrderValue < ASourceMinOrderValue);
  85.  
  86. ADataSet.First;
  87. for I := to ADataSet.RecordCount - do
  88. begin
  89. ADataSet.Edit;
  90. if IsUp and (AField.AsInteger >= ADestOrderValue) and (AField.AsInteger < ASourceMinOrderValue) then
  91. AField.AsInteger := AField.AsInteger + AController.SelectedRowCount;
  92. if not IsUp and (AField.AsInteger <= ADestOrderValue) and (AField.AsInteger > ASourceMaxOrderValue) then
  93. AField.AsInteger := AField.AsInteger - AController.SelectedRowCount;
  94. ADataSet.Post;
  95. ADataSet.Next;
  96. end;
  97.  
  98. if Not IsUp then
  99. ADestOrderValue := ADestOrderValue - AController.SelectedRowCount + ;
  100.  
  101. for I := to AController.SelectedRowCount - do
  102. begin
  103. TcxDBDataController(GridView.DataController).LocateByKey(AKeys[I]);
  104. ADataset.Edit;
  105. AField.Value := ADestOrderValue + I;
  106. ADataset.Post;
  107. end;
  108.  
  109. end;
  110. end;
  111.  
  112. procedure TForm1.FormCreate(Sender: TObject);
  113. begin
  114. Table1.Open;
  115. end;
  116.  
  117. procedure TForm1.cxGrid1DBTableView1StartDrag(Sender: TObject;
  118. var DragObject: TDragObject);
  119. var
  120. I: Integer;
  121. begin
  122. with TcxGridDBTableView(TcxGridSite(Sender).GridView) do
  123. begin
  124. AKeys := VarArrayCreate([, Controller.SelectedRecordCount - ], varVariant);
  125. for I := to Controller.SelectedRecordCount - do
  126. AKeys[I] := Controller.SelectedRecords[I].Values[cxGrid1DBTableView1ID.Index];
  127. end;
  128. end;
  129.  
  130. procedure TForm1.Button1Click(Sender: TObject);
  131. begin
  132. with Table1 do
  133. begin
  134. DisableControls;
  135. try
  136. First;
  137. while not Eof do
  138. begin
  139. Edit;
  140. FieldValues['Order'] := FieldValues['ID'];
  141. Next;
  142. end;
  143. finally
  144. EnableControls;
  145. end;
  146. end;
  147. end;
  148.  
  149. end.

DFM

  1. object Form1: TForm1
  2. Left =
  3. Top =
  4. Caption = 'Form1'
  5. ClientHeight =
  6. ClientWidth =
  7. Color = clBtnFace
  8. Font.Charset = DEFAULT_CHARSET
  9. Font.Color = clWindowText
  10. Font.Height = -
  11. Font.Name = 'MS Sans Serif'
  12. Font.Style = []
  13. OldCreateOrder = False
  14. OnCreate = FormCreate
  15. PixelsPerInch =
  16. TextHeight =
  17. object cxGrid1: TcxGrid
  18. Left =
  19. Top =
  20. Width =
  21. Height =
  22. Align = alClient
  23. TabOrder =
  24. object cxGrid1DBTableView1: TcxGridDBTableView
  25. DragMode = dmAutomatic
  26. OnDragDrop = cxGrid1DBTableView1DragDrop
  27. OnDragOver = cxGrid1DBTableView1DragOver
  28. OnStartDrag = cxGrid1DBTableView1StartDrag
  29. NavigatorButtons.ConfirmDelete = False
  30. DataController.DataSource = DataSource1
  31. DataController.KeyFieldNames = 'ID'
  32. DataController.Summary.DefaultGroupSummaryItems = <>
  33. DataController.Summary.FooterSummaryItems = <>
  34. DataController.Summary.SummaryGroups = <>
  35. OptionsSelection.CellSelect = False
  36. OptionsSelection.MultiSelect = True
  37. object cxGrid1DBTableView1ID: TcxGridDBColumn
  38. DataBinding.FieldName = 'ID'
  39. Options.Sorting = False
  40. end
  41. object cxGrid1DBTableView1Order: TcxGridDBColumn
  42. DataBinding.FieldName = 'Order'
  43. Options.Sorting = False
  44. SortIndex =
  45. SortOrder = soAscending
  46. end
  47. object cxGrid1DBTableView1Text: TcxGridDBColumn
  48. DataBinding.FieldName = 'Text'
  49. Options.Sorting = False
  50. end
  51. end
  52. object cxGrid1Level1: TcxGridLevel
  53. GridView = cxGrid1DBTableView1
  54. end
  55. end
  56. object Button1: TButton
  57. Left =
  58. Top =
  59. Width =
  60. Height =
  61. Caption = 'Reset Order'
  62. TabOrder =
  63. OnClick = Button1Click
  64. end
  65. object DataSource1: TDataSource
  66. DataSet = Table1
  67. Left =
  68. Top =
  69. end
  70. object Table1: TTable
  71. DatabaseName = '.\'
  72. TableName = 'TestTable.db'
  73. Left =
  74. Top =
  75. object Table1ID: TAutoIncField
  76. FieldName = 'ID'
  77. ReadOnly = True
  78. end
  79. object Table1Order: TSmallintField
  80. FieldName = 'Order'
  81. end
  82. object Table1Text: TStringField
  83. FieldName = 'Text'
  84. Size =
  85. end
  86. end
  87. 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. ubuntu设置网络

    二 .设置无线网络 1.首先确认一下你的无线驱动已经安装 方法一,查看一下ubuntu右上角的网络设置中有无线连接,如果有说明已经驱动了,ubuntu自带的就会驱动无线网卡. 方法二,iwconfig ...

  2. for、for in和while以及do while

    for循环:一般用在已知判断条件的循环; for(变量初始化;循环条件判断;循环后的执行){ 代码块 } //变量初始化可以省略,但是分号不能省.有多个的话用逗号隔开 //循环条件判断是true还是f ...

  3. 面向对象的线程池Threadpool的封装

    线程池是一种多线程处理形式,预先创建好一定数量的线程,将其保存于一个容器中(如vector), 处理过程中将任务添加到队列,然后从容器中取出线程后自动启动这些任务,具体实现如下. 以下是UML图,展示 ...

  4. Ubuntu 上查看硬件信息命令

    1.Mint 驱动程序管理器是由 Linux Mint 团队开发的一款系统工具软件,使得用户在Linux系统中可容易安装专有驱动,通过一个直观的界面.由于 Mint 驱动程序管理器具有独立性,它支持所 ...

  5. grub2与grub区别

    关于版本: GRUB2 使之版本号为1.98之后的grub:GRUB legacy(版本为0.97)是指GRUB,而非GRUB2,grub是指 grub1.97 和以前的,grub 2 指的是 gru ...

  6. Excel 2010高级应用-气泡图(八)

    Excel 2010高级应用-气泡图(八) 基本操作如下: 1.新建空白文档,并命名为气泡图,找到插入中的气泡图样 2.在其他图表中找到气泡图图样 3.单击气泡图图样,生成空白气泡图框 4.在气泡图图 ...

  7. AM335x(TQ335x)学习笔记——USB驱动移植

    对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...

  8. 双硬盘RAID 0全攻略

    . RAID53 RAID7即高效数据传送磁盘结构,是RAID3和带区结构的统一,因此它速度比较快,也有容错功能.但价格十分高,不易于实现. 为什么需要磁盘阵列        如何增加磁盘的存取(ac ...

  9. Linux显示查看您拥有的仓库

    Linux显示查看您拥有的仓库 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ yum repolist all repolist: 0

  10. 安装使用pyclone进行克隆演化推断

    pyclone介绍   可以根据多个样品突变的allele frequency 和 copy number,推断出有该突变的细胞克隆所占的比例(cellular prevalence)在不同样品间的变 ...