转贴:dx系列第三方控件使用经验介绍

呵呵,贴点DXDBGRID的编程技巧给大家:

分类:控件 - 使用 ( 版主:amo, cAkk ) 
来自:blue_morning, 时间:2002-7-16 10:22:00, ID:1204751 [显示:小字体 | 大字体] 
一、如何设定可以多列自动排序?
    只能使用分组:如按a1,a2,a3,a4排序
    先按a1分组,再a2,再a3
    然后设置a4的排列(升/降)

二、如何设定左边几列,不能滚动?
    建立Band0,Band1
    Band0的Fixed=tfLeft
    Band1的Fixed=tfnone
    设置要锁定的字段的BandIndex=0,其它为1
三、如何访问,显示字段的对象,控制其可视与不可视?
   参看自带例程RunTimeCustomizing.dpr
四、既然不能用readonly,那我用edgoEditing属性对吗?
   要想ReadOnly=True.我用edgoRowSelected=True;
-------------------------------------------------------------------------------
DXDBGRID有没有属性(如SORT等)可以实现:点击DXDBGRID的
某个字段标题,就按这个标题排序?如果有,怎么用?
呵呵。 楼上的。 你这样对待DXGRID 啊。 太痛苦了。

DXGRID 设计排序和统计的关键前提是先指定 DXGRID 的KEY FIELD字段
然后设置它的 edgoAnsi Sort属性 为TRUE 就可以了.随便点任意字段都可以排序
如果还需要显示合计的话。 需要将edgoLoadAllRecords  设置为 True.
不过需要注意 如果你做的是C/S编程,这意味着要从服务器上把所有符合条件的记录
全部取回本地
------------------------------------------------------------------------------
整理ExpressQuantumGrid控件心得如下:
  针对TdxDBGrid仅仅设置一些属性,就可以到达很好的效果:
 前提:先设置DataSource、ADODataSet、以及TdxDBGrid的属性后,设置ADODataSet的Active=true;然后才能在TdxDBGrid中的鼠标右键->
       column-> Add all Fields; 注意:一定要设置TdxDBGrid控件的属性keyField、并设置OptionsDB中edgoLoadAllRecord=true 。

 1、显示脚注栏: 设置属性showSummeryFooter=true即可。
 2、显示某一列的汇总值(或总个数): 设置summaryFooterType,为cstSum(或cstAvg)、并设置summaryFormat,即可。
 3、设置Filter:在TdxDBGrid属性中Filter组中Active=true。
 4、设置Sort:在OptionsBehavior中设置 :edgoAutoSort=true。
 5、设置汉字提示:在column中->SummaryFormat中输入样式,如:(数量=0.00)
 6、summary样式,一共分为三种:
    (1)summary:用于行的总体说明GroupNode类型。
    (2)summaryFooter:在整个Grid的底部footer处显示。
    (3)summaryRowFooter:在每个行的底部显示信息。(行,是几条记录形成的小组)。
------------------------------------------------------------------------------
在DELPHI的标准控件中很容易的用
grid.columns.add就可以加如一个列,但在DX控件中却不支持。
WHY????????????????????/
 
 
来自:sun77wind, 时间:2002-1-31 15:53:00, ID:898563
WHY?
不知道,反正他就是不支持。
我也在研究这个东东,怎么,交流交流?
 
 
来自:sun77wind, 时间:2002-2-1 11:23:00, ID:900250
我找到了
  dxDBGrid1.CreateColumn(TdxDBGridMaskColumn);//TdxDBGridMaskColumn,列类型
  dxDBGrid1.Columns[4].FieldName := 'City';//4列索引,City字段名称
出现

 
 
来自:glbboy, 时间:2002-2-1 13:15:00, ID:900595
我就顺道问问,怎么让汇总的列自动跟着前面输入的变化。
在keyup事件中,dbgShare.Fields[4].AsFloat:=
               dbgShare.Fields[1].AsFloat*
               dbgShare.Fields[2].AsFloat*
               dbgShare.Fields[3].AsFloat;
这样的话等输完它又变回去了,如果用Post先提交,
那样的话整个输入又获得了焦点,继续输的时候又把输好的给覆盖了,总之很不爽,
大家可以试试。而在其他事件中,又不是实时变化。
 
 
来自:sun77wind, 时间:2002-2-1 16:23:00, ID:901144
你怎么不用计算字段呢?
 
 
来自:glbboy, 时间:2002-2-1 18:27:00, ID:901471
在DBGRID事件BeforeScroll、ColExit两个事件中都加如下代码实现了汇总。
qryShare.Edit;
qryShare.Fields[4].AsCurrency:=qryShare.Fields[1].AsCurrency*
qryShare.Fields[2].AsCurrency*qryShare.Fields[3].AsCurrency;
qryShare.Post;
但有一点不好,就是对数据库操作太多了。:)
计算字段?有这个数据类型吗?说详细点OK!
最好是给具体简单一点的代码!

 
 
来自:china_peng, 时间:2002-2-1 18:39:00, ID:901499
 不瞒你说,我搞了一天,曾经发过帖子;
最后自己搞定了;
  with DXDBGRID1.CreateColumn(TdxDBGridMaskColumn) as TdxDBGridMaskColumn do
              begin
                FieldName := ClientDataSet3.Fields[Ifieldcount].FieldName;
                HeaderAlignment := taCenter;
                 Width := 90;
------------------------------------------------------------------------------
 SaveToIni可以保存dxDBGrid的设置
------------------------------------------------------------------------------
寒松大侠说的对!dxDbGrid + devPrintSystem 就可以了。
不改也可以打印!
1.安装上devPrintSystem 控件。
2.窗体上加入dxComponentPrinter控件,dxDBGrid控件。双击devPrintSystem 。
加入一个dxComponentPrinter1Link,用来与dxdbgrid连接。
dxComponentPrinter.Preview用来预览。Print用来打印。
注意要设置dxdbgrid的keyfield,不然没有数据显示出来的。

 

 
 
来自:hjandy, 时间:2002-6-3 15:58:00, ID:1140738
To :王寒松
请教关于dxDBGrid的下述两个问题
A:怎样在DefaultFields=True正常打印
B:若预设dxDBGrid的DefaultFields=False,怎样在运行时动态加入栏位或组以及打印

注:(1)数据表(DataSource)连接TClientDataSet
    (2)使用标题筛选Filter.Active=True
    (3)加入TdxComponentPrinter并设置

若预设dxDBGrid的DefaultFields为True、edgoLoadAllRecords为True并加入KeyField值、设置上述(1)、(2)、(3)时,执行打印为空不能打印dxDbGrid内容
 
 

------------------------------------------------------------------------------
在使用中发现了一个问题:
有些时候,在grid中选中显示的数据(即光标定位的那一条记录)和数据源中当前的记录不匹配,
而且出现这种情况随机的,应该和具体的属性设置没有关系。
看看哪位兄台也遇上过类似的问题,麻烦赐教!

来自:luozi, 时间:2002-1-30 17:24:00, ID:895998
cjf说的是syncSelection属性吧,在dxdbgrid的optiondb下。
我以前的同事也遇到这个问题,不过如果不设KEYField属性好像就不会有这个问题了。
关注。◎◎
 
 
来自:fjnnz, 时间:2002-1-31 11:11:00, ID:897655
To luoji:
    但是如果不设keyField,就不能使用LoadAllRecords属性,不使用LoadAllRecords属性,
则排序,分组,筛选这些强大的功能都不能使用了,岂不是可惜的很?

我前天也出了这个问题,经过检查,发现是keyfield设置成了一个非唯一的字段造成的,
把keyfield设置成唯一的字段就不会了,不一定是主码,只要是唯一就行了,
随即出现不能locate估计是当locate的时候,找出来的是keyfield,所以就停留在第一个
keyfield和locate相同的那一条记录中了
 
 
来自:mjy97, 时间:2002-2-6 12:53:00, ID:910760
条件:
一、keyfield设置为唯一值字段

二、LoadAllRecords:=True

------------------------------------------------------------------------------
我在dxDBGrid中,在dxDBGrid1DQPZH列中的ONValidate事件中,怎样取得我刚输入的值,
我用dxDBGrid1DQPZH.Field.OldValue或dxDBGrid1DQPZH.Field.NewValue,均取得没修改
以前的值。

这个事件确实有问题,我的解决办法是在dxDbGrid的OnEdited中编程,代码如下
新值: dxDBGrid1.FocusedField.NewValue
旧值: dxDBGrid1.FocusedField.OldValue
 
 
来自:caodz, 时间:2002-3-1 16:06:00, ID:952000
在dxDBGrid1ChangeColumn事件中,写
X:=dxDBGrid1DQPZH.Field.TEXT
 
 

------------------------------------------------------------------------------
dxDBGrid怎样用代码动态增加列,
搞定了
 with dxDBGrid1.CreateColumn(TdxDBGridButtonColumn) as TdxDBGridButtonColumn do
  begin
    FieldName := 'NAME';
  end;
------------------------------------------------------------------------------
dxdbGrid的状态栏中的汇总结果,当添加新的记录的时候,不能刷新
怎么办?应该在那里再进行一次汇总调用?
将LoadAllRecord 设为true即可.

------------------------------------------------------------------------------
 dxDBGrid的继承关系是:
  TWinControl-->TCustomControl-->TCustomdxContainer
  -->TCustomdxTreeList-->TCustomdxDBTreeListControl
  -->TCustomdxDBGrid-->TdxDBGrid
------------------------------------------------------------------------------
dxDBGrid如何固定某列不左右移动?
options下的egoColumnMoving设为false
------------------------------------------------------------------------------
如何知道当前DXDBGRID的行号和列号
列号和列名
我是说DXDBGRID不是DBGRID

 
 
来自:萧月禾, 时间:2002-5-22 14:11:00, ID:1116753
  dxDBGrid.FocusedNode.Index
  dxDBGrid.FocusedColumn

 
 
来自:小草, 时间:2002-5-22 14:30:00, ID:1116803
大哥请问如何为坐标为(2,3)行号和列号
的DXDBGRID赋值?
 
 
来自:萧月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值