delphi中cxGrid使用汇总(一)
(转)
解决:在tableview1的ptionsview的groupbybox=false;
2.统计功能
解决:(1) tableview
1.
tableview1的optionsviewfooter=ture
2.然后在cxGRid1的customize..中的summary
的footer.add需要合计的列kind=
skSum
在Footer的第一列显示[合计:]
加一个Summary项,Column设为Grid的第一列,Kind设为skNone
在该Summary项的OnGetText事件中,输入:
procedure
begin
procedure
begin
OptionView中属性GroupFooters设为gfAlwaysVisible并设置需要求和的列,
在summary.default for Groups
下add加入需要合计的字段,column下显示fieldname 为统计字段,format为格式,kind为统计方法,position
为位子 spfooter 在分组的下面,spgroup 在分组的上面
或用cxGridPopupMenu1,在运行時可对任意数字类型列求和,方法是只需设置cxGridPopupMenu1的属性Grid为cxGrid1DBTableView1的cxGrid,
*****************************************************************************
3.去掉cxgrid 中的过滤下拉箭头
解决:
选择tableview1.optionscustomize.columnfiltering=fasle;
****************************************************************************
4.让“Drag a column here to group by that
column”不显示
****************************************************************************
5.GroupPanel上面的英文[Drag a column header to group by
that column]怎么可以改成中文
解决:最简单的方法是
TcxGridTableView.OnCustomDrawPartBackgrou
也可用 OnCustomDrawGroupCell:
procedure
TForm1.cxGrid1DBTableView1Custo
begin
注:改成中文后将字段拖上去中文还是会显示,最好是设置空值
****************************************************************************
6.如何实现如下功能:
+财务部
+原材料仓库
+成品库
+冲压车间
+软件开发部
这个是部门的名称,点击加号就可以将本部门的人员情况显示出来。
解决:其实这是一个主从表关系,1:填好主表的keyfieldnames
2:填好从表的keyfieldnames
3:填好从表的 detaikeyfieldNames与masterkeyfieldnames
4:
从表的数据源一定要按与主表关联的字段排序
注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和
asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。
****************************************************************************
7.类似PageControl显示
解决:增加一个Level,将cxGrid1->RootLevelOptions->DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。
****************************************************************************
8.如何设定左边几列,不能滚动
解决:使用DB Banded
Table才可以实现,在cxGrid1DBBandedTableView
Band0的Fixed=tfLeft
Band1的Fixed=tfnone
设置要锁定的字段的BandIndex=0,其它为1,就OK了。
*******************************************************************************
9.
怎样实现如EXCEL一样的,当前格=G14+G15+G16 这样的功能
解决:
举一个简单的例子:label1.Caption :=
cxGrid1DBTableView1.DataController.Value[2,3]+cxGrid1DBTableView2.DataController.Values[1,
1]+cxGrid1DBTableView3.DataController.Values[1, 1];
所以不同cxGrid1DBTableView中的数据都可以给当前格,这样就做到了EXCEL中的当前格=G14+G15+G16
类似的功能。
****************************************************************************
10.
鼠标右击cxGrid1DBBandedTableView
解决:可以拖动字段,并列的可以拖成有层次感(一层层), 拖动时会显示箭头的,就是说可以拖一个字段放
****************************************************************************
11.怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT
解决:uses
cxExportGrid4Link; ( cxExportGrid6Link)
procedure
TForm1.Button1Click(Sender: TObject);
begin
****************************************************************************
12.
如何使满足条件的数据显示不同的颜色?
解决:
- var
-
AYellowStyle:
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); - begin
- if
ARecord .Values[cxGrid1DBBandedTableView1Lengthcm .Index]< 81then -
AStyle := AYellowStyle; - end;
这里cxGrid1DBBandedTableView
****************************************************************************
13.
如何从外边的TXT文件导入到cxGrid?
解决:
- procedure
CustomizeColumns; - procedure
LoadData; -
- procedure
TForm1 .CustomizeColumns; - const
-
cDistance
= 1; -
cRadius
= 5; -
cPeriod
= 4; -
cPstring
= 0; - var
-
I:
Integer; - begin
-
DecimalSeparator
:= '.'; - with
cxGrid1TableView2 do - for
I 0:= to ColumnCount 1- do - if
I in[cDistance, thencRadius] - Columns[I].DataBinding.ValueTypeClass
:= //1,5列为IntegerTcxIntegerValueType - else
- if
I in[cPstring,cPeriod] then - Columns[I].DataBinding.ValueTypeClass
:= //0,4列为StringTcxStringValueType - else
- Columns[I].DataBinding.ValueTypeClass
:= //其他为FloatTcxFloatValueType; - end;
-
- procedure
TForm1 .LoadData; - const
-
AFileName
= '资产负债表.txt'; -
AHeaderLineCount
= 2; -
- var
-
ARecords,
AValues: TStringList; -
I:
Integer; -
- procedure
InitRecord( constStr: string); - var
-
J:
Integer; -
V:
Variant; - begin
- AValues.CommaText
:= Str; - for
J 0:= to AValues .Count- 1do - if
AValues .Strings[J]<> '-'then - begin
-
V
:= AValues.Strings[J]; - if
not VarIsNull(V) then - cxGrid1TableView2.DataController.Values[I,
J] := V; - end;
- end;
-
- begin
- if
not FileExists(AFileName) then - raise
Exception .Create('Datafile );not found' -
-
ARecords
:= TStringList.Create; -
AValues
:= TStringList.Create; -
- with
ARecords do - try
-
LoadFromFile(AFileName);
- cxGrid1TableView2.BeginUpdate;
- cxGrid1TableView2.DataController.RecordCount
:= Count - AHeaderLineCount; - for
I 0:= to Count 1)- (AHeaderLineCount + do -
InitRecord(Strings[I
+ AHeaderLineCount]); - finally
- cxGrid1TableView2.EndUpdate;
- ARecords.Free;
- AValues.Free;
- end;
- end;
-
- procedure
TForm1 .FormCreate(Sender:TObject); - begin
-
CustomizeColumns;
-
LoadData_Zcfz;
- end;
-
-
****************************************************************************
- 14
如何改变列的颜色? -
解决:
- var
-
AFirstColumnStyle:
TcxStyle; -
- procedure
TForm1 .FormCreate(Sender:TObject); - begin
- //列颜色
-
AFirstColumnStyle
:= TcxStyle.Create(Self); - AFirstColumnStyle.Color
:= clAqua; - AFirstColumnStyle.TextColor
:= clBlue; - cxGrid1TableView1.Columns[1].Styles.Content
:= AFirstColumnStyle; - end;
-
****************************************************************************
- 15
Set asdefault的用法? - 解决:Set
as default的用法是为了解决设置参数的方便而做的,比如: - 连 好数据库以后,更改
cxGrid1DBBandedTableView
1->OptionsCustomize-> ColumnFiltering 设为 False。(这个设置可以将字段名的下拉单给去掉)更改 cxGrid1DBBandedTableView 1->OptionsView- >Navigator 设置为True。然后右击 cxGrid1DBBandedTableView 1,在弹出的菜单栏里面点击Set as default。 -
OK,下次你再产生一个新的cxGrid1DBBandedTableView
1时这些设置和刚才的一样了。如果需要设置的参数很多的时候,这个Set as default很有用! -
-
****************************************************************************
- 16.
怎样使鼠标移动时,相应的单元里的文字变色? -
解决:
- var
-
FTrackItem:
TcxCustomGridTableItem; -
FTrackRec:
TcxCustomGridRecord; -
- procedure
TForm1 .cxGrid1DBTableView1CustomDrawCell( -
Sender:
TcxCustomGridTableView; ACanvas: TcxCanvas; -
AViewInfo:
TcxGridTableDataCellView Info; var ADone: Boolean); - begin
- if
(AViewInfo .GridRecord= andFTrackRec) (AViewInfo .Item= thenFTrackItem) - begin
- ACanvas.Font.Color
:= //红色字体clred; - ACanvas.Font.Style
:= //带下划线[fsUnderline]; - end;
- end;
-
- procedure
TForm1 .cxGrid1DBTableView1MouseMove(Sender: TObject; -
Shift:
TShiftState; X, Y: Integer); - var
-
AHitTest:
TcxCustomGridHitTest; -
ATrackItem:
TcxCustomGridTableItem; -
ATrackRec:
TcxCustomGridRecord; - begin
-
ATrackItem
:= FTrackItem; -
ATrackRec
:= FTrackRec; -
-
AHitTest
:= (Sender as TcxGridSite).GridView .ViewInfo.GetHitTest(X,Y); - if
AHitTest isTcxGridRecordCellHitTest then - begin
-
FTrackItem
:= TcxGridRecordCellHitTest (AHitTest).Item; -
FTrackRec
:= TcxGridRecordCellHitTest (AHitTest).GridRecord; - end
- else
- begin
-
FTrackItem
:= nil; -
FTrackRec
:= nil; - end;
-
- if
(ATrackItem or<> FTrackItem) (ATrackRec then<> FTrackRec) - begin
- //
Invalidate old cell - if
ATrackRec nil<> then - ATrackRec.Invalidate(ATrackItem);
- //
Invalidate new cell - if
FTrackRec nil<> then - FTrackRec.Invalidate(FTrackItem);
- end;
- end;