1:cxgrid是应该数据关联的控件,类似dbgrid。
2:一般用来查阅表信息,如果要修改的话,直接在上面编辑或添加

非常不方便通常要放几个EDit来对选中的记录进行编辑或添加记录。

因为表一般都有主键,而用cxgrid很难控制。在post之前的主键检查工作。

3:由于没有直接进行编辑,而post之前又要进行主键检查工作(需要循环

adoquery,此时的记录索引已经改变了)。所以我们要用一个bookmack。在编辑

的时候先Getbookmack,在确认修改数据的时候,先GotoBookMark,再把值更新。

4:在选择某条记录后,需要得到相应的字段值显示在Edit上面,这个时候就要用

cxGridDBTableView的Cellclick事件里面处理;

可以用click事件里面的一个参数:ACellViewInfo。该参数的一个属性;

如:EdtMperson.text:=ACellViewInfo.GridRecord.Values[2];

5:当需要得到随即选择的多条记录时有两种办法

qrymast是一个adoquery

⑴第一步得到选择的总数

Icount:=cxGrid1DBTableView1.DataController.GetSelectedCount;

⑵循环所有所选择的记录

forn:=0toicount-1do

begin

⑶将选择记录的索引转换为数据集的索引

i:=cxGrid1DBTableView1.DataController.GetSelectedRowIndex(n);

如果cxgriddbtableview没有设置排序,那么第一种方法也是正确的(因为cxgriddbtableview显示

的数据和qrymast显示的数据顺序是一样的)

//这是第一种方法,取qrymast的数据

inc(i);//因为qrymast的记录是从1开始的

qryMast.RecNo:=i;

得到需要的数据值

listbox1.Items.Add(qrymast.fields[0].asstring);

//这是第二种方法,取cxGrid1DBTableView1.ViewData的数据

ifi=0then

cxGrid1DB.DataController.GotoFirst

else

cxGrid1DBTableView1.DataController.RecNo:=i;

str:=cxGrid1DBTableView1.ViewData.Rows[i].Values[0];

listbox1.Items.Add(str);

end;

(一次测试的时候,cxGrid1DBTableView1.DataController.RecNo:=0;语句会报错,

如果改为cxGrid1DB.DataController.GotoFirst,就没有问题)

6:当有时候用到ACellViewInfo.GridRecord.Values[2]时候,由于values[2]是一个变体

类型Variant,而如果这个时候相应的字段值如果为空,下面这样用就会报错。

EdtMperson.text:=ACellViewInfo.GridRecord.Values[2];

可以先判断一下:

ifACellViewInfo.GridRecord.Values[4]<>nullthen

MemRdesc.Lines.Text:=ACellViewInfo.GridRecord.Values[4];

========================================================================

使用cxGrid有一些时间了,在这里总结一下使用cxGrid的一些方法,希望给刚开始接触cxGrid的人一些帮助。

1.简单介
绍:cxGrid右下方的cxGrid1Level1是表示Grid表的层,cxGrid可以有多层,这相当于集合了PageControl的

功能,而
cxGrid1Level1右边的cxGrid1DBTableView1相当于DBGrid一样。右击cxGrid1可以添加
cxGrid1Level2,右

击cxGrid1Level2,可以选择Create View , Add level 或者Delete
Level。Add level可以增加子Level,Create

View里面可以选择很多不同总类的View。其中 1)DB Table可以和数据库连接的View,更一般的DBGrid类似,它比DBGrid多了比如鼠标中键可以用,可以统计,

查询,等等功能; 2)DB Banded Table 则可以实现比如: --------------------------------- | 说明1 | 说明2 | --------------------------------- | 字段1 | 字段2 | 字段3 | 字段4 |等类似的功能; 3)DB Card View 则提供了卡片方式的显示数据的功能,这个用在比如人事档案管理比较不错; 4)其它不一一赘述。2.一些使用方法: 1)有图片和MEMO的例子:
拖入一个cxGrid1,Table1,DataSource1。
Table1的DatabaseName设为DBDEMOS,TableName设为

biolife.db,Active设为True;
DataSource1的DataSet设为Table1;cxGrid1DBTableView1的DataController中


DataSource设为DataSource1;右击cxGrid1DBTableView1选择Create All
Columns;双击cxGrid1,在弹出

的窗口中找到cxGrid1DBTableView1Notes和
cxGrid1DBTableView1Graphic,将它们的Properties属性设为

BlobEdit;运行看看结果。再将
cxGrid1DBTableView1Graphic的Properties属性设为Image,再将Properties下

的Stretch设为
True, 将cxGrid1DBTableView1->optionsview->CellAutoHeight
设为True,看看结果。

2)如何让“Drag a column here to group by that column”不显示 解决:点击cxGrid1上的cxGrid1DBTableView1 在cxGrid1DBTableView1->optionsview->groupbybox:=false即可 注:OptionsView里面有很多属性可能经常要用,比如:ColumnAutoWith,Navigator等等,慢慢琢磨吧:) 3)GroupPanel上面的英文[Drag a column header to group by that column]怎么可以改成中文? 解决:最简单的方法是 TcxGridTableView.OnCustomDrawPartBackground ,也可用

OnCustomDrawGroupCell:

procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean); begin AViewInfo.Text:='动态设置 GroupBox 的显示内容'; ACanvas.FillRect(AViewInfo.Bounds); end;

4)如何实现如下功能: +财务部 +原材料仓库 +成品库 +冲压车间 +软件开发部 这个是部门的名称,点击加号就可以将本部门的人员情况显示出来。 解决:其实这是一个主从表关系,1:填好主表的keyfieldnames 2:填好从表的keyfieldnames 3:填好从表的 detaikeyfieldNames与masterkeyfieldnames 4: 从表的数据源一定要按与主表关联的字段排序 注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和 asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。

5)统计功能 解决:cxGrid1DBTableView1->optionsview->Footer 设为True cxGrid1DBTableView1->DataController->Summary设置FooterSummaryItems即可

6)类似PageControl显示 解决:增加一个Level,将cxGrid1->RootLevelOptions->DetailTabsPosition设为dtpTop,然后相应的设

置cxGrid1Level1,和cxGrid1Level2的Caption值。

2003-10-30 20:55:11 问题7,8,9 7)如何设定左边几列,不能滚动? 解决:使用DB Banded Table才可以实现, 在cxGrid1DBBandedTableView里建立Band0,Band1 Band0的Fixed=tfLeft Band1的Fixed=tfnone 设置要锁定的字段的BandIndex=0,其它为1,就OK了。 8)怎样实现如EXCEL一样的,当前格=G14+G15+G16 这样的功能 解决:举一个简单的例子:label1.Caption := cxGrid1DBTableView1.DataController.Values[2,

3]+cxGrid1DBTableView2.DataController.Values[1, 1]+cxGrid1DBTableView3.DataController.Values[1, 1];所以不同cxGrid1DBTableView中的数据都可以给当前格,这样就做到了EXCEL中的当前格=G14+G15+G16

类似的功能。9)鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout什么用,怎么使用? 解决:可以拖动字段,并列的可以拖成有层次感(一层层), 拖动时会显示箭头的,就是说可以拖一个字段放

到最上面,就可以使记录按此字段进行分组。点击其中一个字段,上面还会出现一个上升或者下降的小三角形,这个

小三角形的作用是在运行阶段,数据就会按照这个字段上升或者下降排序。 还有一个Set as Default的作用是保持当前TableView的参数,下此产生新的TableView的时候就会可以和

上次保持的参数一样。这个还没有做过试验。

2003-11-2 21:45:37 问题1010)怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT 解决:这个问题在用了cxGrid以后变得异常简单,usescxExportGrid4Link;

procedure TForm1.Button1Click(Sender: TObject);beginExportGrid4ToEXCEL('d:/wang.xsl',cxGrid1,True,True);ExportGrid4ToTEXT('d:/wang.txt',cxGrid1,True,True);ExportGrid4ToXML('d:/wang.xml',cxGrid1,True,True);ExportGrid4ToHTML('d:/wang.html',cxGrid1,True,True);end;

2003-11-2 21:54:10 问题1111)如何使满足条件的数据显示不同的颜色?解决:varAYellowStyle: TcxStyle;

procedure TForm1.FormCreate(Sender: TObject);begin//行颜色AYellowStyle := TcxStyle.Create(Self);AYellowStyle.Color := $0080FFFF;AYellowStyle.TextColor := clMaroon;end;

procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);beginif ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index] < 81 then AStyle := AYellowStyle;end;

这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示***

2003-11-2 21:59:39 问题1212)如何从外边的TXT文件导入到cxGrid?解决: procedure CustomizeColumns; procedure LoadData;

procedure TForm1.CustomizeColumns;constcDistance = 1;cRadius = 5;cPeriod = 4;cPstring = 0;varI: Integer;beginDecimalSeparator := '.';with cxGrid1TableView2 dofor I := 0 to ColumnCount - 1 do if I in [cDistance, cRadius] then Columns[I].DataBinding.ValueTypeClass := TcxIntegerValueType//1,5列为Integer else if I in [cPstring,cPeriod] then Columns[I].DataBinding.ValueTypeClass := TcxStringValueType//0,4列为String else Columns[I].DataBinding.ValueTypeClass := TcxFloatValueType;//其他为Floatend;

procedure TForm1.LoadData;constAFileName = '资产负债表.txt';AHeaderLineCount = 2;

varARecords, AValues: TStringList;I: Integer;

procedure InitRecord(const Str: string);var J: Integer; V: Variant;begin AValues.CommaText := Str; for J := 0 to AValues.Count - 1 do if AValues.Strings[J] <> '-' then begin V := AValues.Strings[J]; if not VarIsNull(V) then cxGrid1TableView2.DataController.Values[I, J] := V; end;end;

beginif not FileExists(AFileName) then raise Exception.Create('Data file not found');

ARecords := TStringList.Create;AValues := TStringList.Create;

with ARecords dotry LoadFromFile(AFileName); cxGrid1TableView2.BeginUpdate; cxGrid1TableView2.DataController.RecordCount := Count - AHeaderLineCount; for I := 0 to Count - (AHeaderLineCount + 1) do InitRecord(Strings[I + AHeaderLineCount]);finally cxGrid1TableView2.EndUpdate; ARecords.Free; AValues.Free;end;end;

procedure TForm1.FormCreate(Sender: TObject);beginCustomizeColumns;LoadData_Zcfz;end;

2003-11-3 13:18:58 附件其中“资产负债表.txt”中的数据如下:

资 产 行次 年 初 数 期 末 数 负债及所有者权益 行次 年 初 数 期 末 数--------- ---- ----- -------- ---------- ---- -------- ---------流动资产: 1 0.00 0.00 流动负债: 2 0.00 0.00

2003-11-3 20:09:25 问题1313)如何改变列的颜色?varAFirstColumnStyle: TcxStyle;

procedure TForm1.FormCreate(Sender: TObject);begin//列颜色AFirstColumnStyle := TcxStyle.Create(Self);AFirstColumnStyle.Color := clAqua;AFirstColumnStyle.TextColor := clBlue;cxGrid1TableView1.Columns[1].Styles.Content := AFirstColumnStyle;end;

2003-11-3 20:46:42 问题1414)Set as default的用法?解决:Set as default的用法是为了解决设置参数的方便而做的,比如:
连好数据库以后,更改cxGrid1DBBandedTableView1->OptionsCustomize->
ColumnFiltering

设为False。(这个设置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1->OptionsView-
>

Navigator 设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set as
default。 OK,下次你再产生一个新的cxGrid1DBBandedTableView1时这些设置和刚才的一样了。如果需要设置的参数

很多的时候,这个Set as default很有用!

2003-11-3 20:58:27 问题1515)怎样使鼠标移动时,相应的单元里的文字变色? 解决:varFTrackItem: TcxCustomGridTableItem;FTrackRec: TcxCustomGridRecord;

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);beginif (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem) thenbegin ACanvas.Font.Color := clred; //红色字体 ACanvas.Font.Style := [fsUnderline];//带下划线end;end;

procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);varAHitTest: TcxCustomGridHitTest;ATrackItem: TcxCustomGridTableItem;ATrackRec: TcxCustomGridRecord;beginATrackItem := FTrackItem;ATrackRec := FTrackRec;

AHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);if AHitTest is TcxGridRecordCellHitTest thenbegin FTrackItem := TcxGridRecordCellHitTest(AHitTest).Item; FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridRecord;endelsebegin FTrackItem := nil; FTrackRec := nil;end;

if (ATrackItem <> FTrackItem) or (ATrackRec <> FTrackRec) thenbegin // Invalidate old cell if ATrackRec <> nil then ATrackRec.Invalidate(ATrackItem); // Invalidate new cell if FTrackRec <> nil then FTrackRec.Invalidate(FTrackItem);end;end;

2003-11-5 11:26:19 问题1616)ExpressQuantumGrid 3.2.2中的dxdbgrid和4.2版本中的cxgrid有什么区别?有很大的区别,基本上相当于是两个控件一样。cxgrid是在dxdbgrid基础上完全重写的,所以cxgrid不支持dxdbgrid所以cxgrid里面特意提供了一个将dxdbgrid导入到cxgrid的功能。

2003-11-5 16:31:07 问题1717)怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | --------------------------------- | 字段1 | 字段2 | 字段3 | 字段4 | | 字段5 | 字段6 | | 字段7 | 字段8 | 字段9 |实现这个很简单,你可以直接在上面拖动字段名,拖动时会显示箭头的,放入你想显示的位置就OK了。或者在鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout里也可以拖放。

但是cxGrid不能实现如下的多表头形式: --------------------------------- | 说明1 | 说明2 | --------------------------------- | 说明3 | 说明4 | 说明5 | 说明6 | | 字段1 | 字段2 | | 字段3 | 字段4 | 字段5 |不知道有谁能实现这样的多表头?

2003-11-5 21:51:02 问题1818)在主从表结构时,当点开“+”时怎样将焦点聚在相应主表的记录上?解决:var HitTest: TcxCustomGridHitTest;

procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin// Note that the Sender parameter is a SiteHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);// The point belongs to the [+]/[-] button areaif HitTest is TcxGridExpandButtonHitTest then // Move focus to the record TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := True;end;

2003-11-17 14:16:25 问题1919)CXGrid4如何展开全部节点解决:GridDBTableView1.DataController.Groups.FullExpand;

2003-12-12 17:07:30 问题2020)cxGrid如何动态创建Items的Editor的项? cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为 combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)

解决: var A:TDataSource: B:TcxlookupcomboboxProperties; begin A:=TDataSource.create(self); B:=tcxlookupcomboboxproperties.create(self); A.Dataset:=Dic_ry_xb;//此处指定数据源。 b.listdource:=a;//此处指明字段的listsource属性。 b.keyfieldnames:='a'; //此处指明字段的关键字段 b.listfieldnames:='b'; //此处指明字段的返回值。 b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它

显示为自己想要的中午显示。 cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。end; //这个是初始化的代码,

如何在 cxGrid 中动态创建 View 以及它的 Columns ?

DevExpress

的 cxGrid 实在太复杂了,连动态创建一个 View ,以及自动生成数据集的所有列,都不能使用一般的方法。下面显示了如何用代码来进行这些操作:

TableView := TcxGridDBTableView(cxGrid1.CreateView(TcxGridDBTableView));with

TableView dobegin DataController.DataSource := 数据源; (DataController as

IcxCustomGridDataController).DeleteAllItems; (DataController as

IcxCustomGridDataController).CreateAllItems;end;

cxGrid 使用指南 1的更多相关文章

  1. cxgrid属性说明,每次用的时候费时费力查找。

    由层得到数据表名: procedure TFB_PatientWaiting.cxgrdbtblvwGrid1DBTableView_MyPatienWaitingDblClick( Sender: ...

  2. 转 cxgrid属性说明

    TCXGRID控件:属性:ActiveLevel: 当前层BorderStyle: 窗口风格Color: 颜色FocusedView: 当前View;Font: 字体LevelTabs: 类似Page ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  5. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  6. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  7. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  8. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...

  9. HA 高可用软件系统保养指南

    又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...

随机推荐

  1. Mysql 中 HAVING 和 USING 的使用

    1. HAVING 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 实例:现表Orders(订单)有如下字段: Id,Date,Price ,Customer ...

  2. jBoss无法通过IP地址访问,只能用localhost\127.0.0.1访问

    http://feng88724.iteye.com/blog/263211 JBOSS版本:4.2.2GA 症状:服务器无法通过IP地址去访问,只能用127.0.0.1或者localhost来访问. ...

  3. js中加入数据缓存

    因为我们的系统设计 所有的数据查询全部是采用参数化json 后台解析后进行数据返回 由于使用统一的数据查询入口 所有可以很方便的为数据设置缓存 var ModelDataCache = new Arr ...

  4. python selenium--常用函数1

    新建实例driver = webdriver.Chrome() 1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_elem ...

  5. C语言 文件操作

    /** *@author cody *@date 2014-08-09 *@description copy text file * FILE *fopen(filename,openmode) * ...

  6. Xilinx资源优化问题

    资源优化问题:Xilinx ise 出现资源不够的问题(ERROR:Cpld:868 - Cannot fit the design into any of the specified devices ...

  7. ssh远程主机的免密登录配置

    ssh经常登录远程主机,需要输入密码,很麻烦,怎样变懒呢? test environment:      hostA:ubuntu14.04  username:frank ip:192.168.1. ...

  8. Windows虚拟环境下安装mysql-python

    因为在虚拟环境下安装mysql-python走了许多弯路,特此记录,也希望以后的朋友避免像我一样,被环境配置问题搞的半死 直接使用pip安装mysql-python会报错 pip install My ...

  9. 阿里正式发布《Java开发手册》终极版!

    摘要: 本文讲的是阿里正式发布<Java开发手册>终极版!,别人都说我们是码农,但我们知道,自己是个艺术家.也许我们不过多在意自己的外表和穿着,但我们不羁的外表下,骨子里追求着代码的美.质 ...

  10. CentOS6.5下Apache防止目录遍历

    原先以为CentOS下的Apache应该是默认关闭目录遍历的... 然后拿自己网站试了一下发现想太多...汗 就去改下Apache的配置 首先Apache的配置文件在 /etc/httpd/conf/ ...