呵呵,贴点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赋值?
来自:萧月