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;
⑵循环所有所选择的记录
for n := 0 to icount-1 do
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的数据
if i =0 then
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];
可以先判断一下:
if ACellViewInfo.GridRecord.Values[4]<>null then
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多了比如鼠标中键可以用,可以统计,
查询,等等功能;