如何让cxSpinEdit 显示器型号cx240%

没有更多推荐了,
不良信息举报
举报内容:
cxGrid的一些使用方法
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Delphi&:&cxGrid的使用方法
1.&去掉cxgrid中抬头的box
,在tableview1的ptionsview的groupbybox=
2.&在GRID footer 中加入sum(列),
tableview1的optionsview的footer=ture
然后在cxGRid1的customize中的summary 的footer.add需要合计的列kind= skSum
3.&去掉cxgrid
中的过滤下拉箭头选择tableview1.optionscustomize.columnfiltering=
4.&cxGrid1DBTableView1 的
OptionView中屬性GroupFooters設為gfAlwaysVisible並設置需要求和的列,在summary.default
for Groups 下add加入需要合计的字段,column下显示fieldname
为统计字段,format为格式,kind为统计方法,position 为位子 spfooter 在分组的下面,spgroup
在分组的上面
或用cxGridPopupMenu1,在運行時可對任意數字類型列求和,方法是只需設置cxGridPopupMenu1的屬性Grid為cxGrid1DBTableView1的cxGrid,
即可實現您所需功能
Express里的cxGrid默认的数值格式带¥,怎么去掉啊!
&& 雙擊Cxgrid,選擇colmnum改變類型
options.properties.Memo,在displayformat中进行设置
6.&在网格最后一行的最后一格回车自动增加一条记录,并跳到新记录的第一格
设置cxGrid1DBTableView1的OptionsBehavior的FocusFirsCellOnNewRecord与GoToNextCellOnEnter为True,FocusCellOnCycle设为True
网格中通过Tab跳转,设置cxGrid1DBTableView1的OptionsBehavior的FocusCellOnTab为True
设置是否能够在网格中编辑数据,设置cxGrid1DBTableView1的OptionsData的Appending设为True,Deleting为True,Editing为True
设置是否能选中网格,设置cxGrid1DBTableView1的OptionsSelection的CellSelect为True
设置是否能够反选,设置cxGrid1DBTableView1的OptionsSelection的InsertSelect为True
11. 设置行高:在cxGridDBTableView1.OptionsView.DataRowHeight
12. 改变字体在
& cxStyleRepository
双击它,在里面添加GridTableViewStyleSheetDevExpress
& 然后改变Style标签里面的cxStyle的字体就可以控制cxGrid的字体了
13. 有图片和MEMO的例子:
拖入一个cxGrid1,Table1,DataSource1。
Table1的DatabaseName设为DBDEMOS,TableName设为biolife.db,
Active设为TDataSource1的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,看看结果。
14. 如何让“Drag a column here to group by that column”不显示
解决:点击cxGrid1上的cxGrid1DBTableView1
在cxGrid1DBTableView1-&optionsview-&groupbybox:=false即可
15. GroupPanel上面的英文[Drag a column header to group by that
column]怎么可以改成中文?
&&& 解决:最简单的方法是
TcxGridTableView.OnCustomDrawPartBackground ,也可用
OnCustomDrawGroupCell:
&&& procedure
TForm1.cxGrid1DBTableView1CustomDrawPartBackground(
&&&&&&&&&&&&&&
Sender: TcxGridTableV ACanvas: TcxC
&&&&&&&&&&&&&
AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);
AViewInfo.Text:='动态设置 GroupBox 的显示内容';
ACanvas.FillRect(AViewInfo.Bounds);
16. 如何实现如下功能:
&&&&&&&&&&
&&&&&&&&&&
原材料仓库
&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&
软件开发部
这个是部门的名称,点击加号就可以将本部门的人员情况显示出来。
解决:其实这是一个主从表关系,
&(1):填好主表的keyfieldnames
&(2):填好从表的keyfieldnames
&(3):填好从表的 detaikeyfieldNames与masterkeyfieldnames
&(4): 从表的数据源一定要按与主表关联的字段排序
注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和
asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。
17. 类似PageControl显示
解决:增加一个Level,将cxGrid1-&RootLevelOptions-&DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。&
18. 如何设定左边几列,不能滚动?
&& 解决:使用DB Banded
Table才可以实现,
在cxGrid1DBBandedTableView里建立Band0,Band1
Band0的Fixed=tfLeft
Band1的Fixed=tfnone
设置要锁定的字段的BandIndex=0,其它为1,就OK了。
19. 怎样实现如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
类似的功能。
20. 鼠标右击cxGrid1DBBandedTableView1菜单里的Edit
Layout什么用,怎么使用?&&&
解决:可以拖动字段,并列的可以拖成有层次感(一层层),拖动时会显示箭头的,就是说可以拖一个字段放
到最上面,就可以使记录按此字段进行分组。点击其中一个字段,上面还会出现一个上升或者下降的小三角形,这个
小三角形的作用是在运行阶段,数据就会按照这个字段上升或者下降排序。
&&& 还有一个Set as
Default的作用是保持当前TableView的参数,下此产生新的TableView的时候就会可以和上次保持的参数一样。这个还没有做过试验。
21. 怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT
& 解决:这个问题在用了cxGrid以后变得异常简单,
&cxExportGrid4L
procedure TForm1.Button1Click(Sender: TObject);
&ExportGrid4ToEXCEL('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);
22. 如何使满足条件的数据显示不同的颜色?
AYellowStyle: TcxS
procedure TForm1.FormCreate(Sender: TObject);
& //行颜色
& AYellowStyle := TcxStyle.Create(Self);
& AYellowStyle.Color := $0080FFFF;
& AYellowStyle.TextColor := clM
TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableV ARecord: TcxCustomGridR
AItem: TcxCustomGridTableI out AStyle: TcxStyle);
if ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index]
& AStyle := AYellowS
这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示黄色
23. 如何从外边的TXT文件导入到cxGrid?
解决:&&& procedure
CustomizeC
procedure LoadD
procedure TForm1.CustomizeC
&cDistance = 1;
&cRadius = 5;
&cPeriod = 4;
&cPstring = 0;
&DecimalSeparator := '.';
&with cxGrid1TableView2 do
&for I := 0 to ColumnCount - 1 do
&& if I in [cDistance, cRadius]
Columns[I].DataBinding.ValueTypeClass :=
TcxIntegerValueType//1,5列为Integer
if I in [cPstring,cPeriod] then
Columns[I].DataBinding.ValueTypeClass :=
TcxStringValueType//0,4列为String
Columns[I].DataBinding.ValueTypeClass :=
TcxFloatValueT//其他为Float
procedure TForm1.LoadD
&AFileName = '资产负债表.txt';
&AHeaderLineCount = 2;
&ARecords, AValues: TStringL
&procedure InitRecord(const Str: string);
&& AValues.CommaText :=
&& for J := 0 to AValues.Count -
AValues.Strings[J] && '-' then
V := AValues.Strings[J];
if not VarIsNull(V) then
cxGrid1TableView2.DataController.Values[I, J] := V;
&if not FileExists(AFileName) then
&& raise Exception.Create('Data
file not found');
&ARecords := TStringList.C
&AValues := TStringList.C
&with ARecords do
&& LoadFromFile(AFileName);
cxGrid1TableView2.BeginU
cxGrid1TableView2.DataController.RecordCount := Count -
AHeaderLineC
&& for I := 0 to Count -
(AHeaderLineCount 1) do
InitRecord(Strings[I AHeaderLineCount]);
cxGrid1TableView2.EndU
&& ARecords.F
&& AValues.F
procedure TForm1.FormCreate(Sender: TObject);
&CustomizeC
&LoadData_Z
24. 如何改变列的颜色?
&AFirstColumnStyle: TcxS
procedure TForm1.FormCreate(Sender: TObject);
&AFirstColumnStyle := TcxStyle.Create(Self);
&AFirstColumnStyle.Color := clA
&AFirstColumnStyle.TextColor := clB
&cxGrid1TableView1.Columns[1].Styles.Content :=
AFirstColumnS
25.Set as default的用法?
&解决:Set as default的用法是为了解决设置参数的方便而做的,比如:
连好数据库以后,更改cxGrid1DBBandedTableView1-&OptionsCustomize-&
ColumnFiltering
设为False。(这个设置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1-&OptionsView-
&Navigator
设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set as
OK,下次你再产生一个新的cxGrid1DBBandedTableView1时这些设置和刚才的一样了。如果需要设置的参数很多的时候,这个Set
as default很有用!
26. 怎样使鼠标移动时,相应的单元里的文字变色?
&FTrackItem: TcxCustomGridTableI
&FTrackRec: TcxCustomGridR
procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
&Sender: TcxCustomGridTableV ACanvas:
&AViewInfo: TcxGridTableDataCellViewI var
ADone: Boolean);
&if (AViewInfo.GridRecord = FTrackRec) and
(AViewInfo.Item = FTrackItem) then
&& ACanvas.Font.Color :=
&& //红色字体
&& ACanvas.Font.Style :=
[fsUnderline];//带下划线
procedure TForm1.cxGrid1DBTableView1MouseMove(Sender:
&Shift: TShiftS X, Y: Integer);
&AHitTest: TcxCustomGridHitT
&ATrackItem: TcxCustomGridTableI
&ATrackRec: TcxCustomGridR
&ATrackItem := FTrackI
&ATrackRec := FTrackR
&AHitTest := (Sender as
TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
&if AHitTest is TcxGridRecordCellHitTest
&& FTrackItem :=
TcxGridRecordCellHitTest(AHitTest).I
&& FTrackRec :=
TcxGridRecordCellHitTest(AHitTest).GridR
&& FTrackItem :=
&& FTrackRec :=
&if (ATrackItem
&& FTrackItem) or (ATrackRec
&& FTrackRec) then
&& // Invalidate old cell
&& if ATrackRec
&& nil then
ATrackRec.Invalidate(ATrackItem);
&& // Invalidate new cell
&& if FTrackRec
&& nil then
FTrackRec.Invalidate(FTrackItem);
27. 怎样设计多表头的cxGrid?
& 解决:cxGrid可以解决如下的表头:
&&&&&&&&&&&&&&&&&&
---------------------------------
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
---------------------------------
&&&&&&&&&&&&&&&&&&
| 字段1 | 字段2 | 字段3 | 字段4 |
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&
字段7&&& | 字段8 |
实现这个很简单,你可以直接在上面拖动字段名,拖动时会显示箭头的,放入你想显示的位置就OK了。或者在鼠标右击cxGrid1DBBandedTableView1菜单里的Edit
Layout里也可以拖放。
28. 在主从表结构时,当点开“ ”时怎样将焦点聚在相应主表的记录上?
&HitTest: TcxCustomGridHitT
procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender:
&Button: TMouseB Shift: TShiftS X, Y:
&// Note that the Sender parameter is a Site
&HitTest := (Sender as
TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
&// The point belongs to the [ ]/[-] button
&if HitTest is TcxGridExpandButtonHitTest
&& // Move focus to the
TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused :=
29. CXGrid4如何展开全部节点
&解决:GridDBTableView1.DataController.Groups.FullE
30. cxGrid如何动态创建Items的Editor的项?
cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为
combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)
&& A:TDataSource:
B:TcxlookupcomboboxPropert
A:=TDataSource.create(self);
B:=tcxlookupcomboboxproperties.create(self);
A.Dataset:=Dic_ry_//此处指定数据源。
b.listdource:=a;//此处指明字段的listsource属性。
b.keyfieldnames:='a';&&&
//此处指明字段的关键字段
b.listfieldnames:='b';&&
//此处指明字段的返回值。
b.listcolumns.items[0].caption:='x;&&&&&&&//此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。
&&&cxGrid1DBTableView1c1_sex_code.Properties:=b;&
//此处指明是那个字段。
//这个是初始化的代码,
31. 获得当前行
cgBrowseView.DataController.GetSelectionAnchorRowIndex
设置DBTableView的OptionCustomize-&ColumnGrouping为True
& 并设置要分组的字段的GroupIndex为一大于等于0的值
33. TdxDBTreeView的节点移动排序
利用TdxDBTreeView控件(此处设为DBTreeMain)时,可以从表中直接显示出树结构,有时需要拖动对节点进行排序,而且数据表中有字段SortCode用于排序码,此时需要编写对应代码,步骤如下
(1).先设置DBTreeMain的DragMode属性为dmAutomatic
(2).设置DBTreeMain的StateIndexField属性为SortCode
(3).在其OnEndDragTreeNode事件中写入
& m: TNodeAttachM
& oldOption: TdxDBTreeViewO
& node: TdxDBTreeN
& bm: TBookmarkS
frmDragOption := TfrmDragOption.Create(nil);
frmDragOption.ShowModal = mrOK then
//ShowMessage('1');
if frmDragOption.rgOption.ItemIndex = 0 then
m := naInsert
m := naAddC
AttachMode :=
with DBTreeMain do
oldOption := O
Options := Options - [trCanDBNavigate];
OnCompare :=
bm := qryTree.B
qryTree.DisableC
Items.BeginU
if m = naInsert then
&&&&&&&&&&&
node := TdxDBTreeNode(Destination);
&&&&&&&&&&&
idx := node.ImageI
&&&&&&&&&&&
UpdateSortCode(Source, idx);
&&&&&&&&&&&
while node && nil do
&&&&&&&&&&&
&&&&&&&&&&&&&
Inc(idx, 10);
&&&&&&&&&&&&&
UpdateSortCode(node, idx);
&&&&&&&&&&&&&
node := TdxDBTreeNode(node.getNextSibling);
&&&&&&&&&&&&&
if node = Source then
&&&&&&&&&&&&&&&
&&&&&&&&&&&
else //添加子
&&&&&&&&&&&
idx := GetChildMaxIdx(Destination) 10;
&&&&&&&&&&&
UpdateSortCode(Source, idx);
Items.EndU
Options := oldO
OnCompare := DBTreeMainC
qryTree.EnableC
qryTree.Bookmark :=
frmDragOption.F
//UpdateSortCode过程
procedure TfrmSetTree.UpdateSortCode(ANode: TTreeN ASortCode:
& key := TdxDBTreeNode(ANode).KeyFieldV
& with qryTree do
Locate('ID', key, []) then
FieldByName('SortCode').AsInteger := ASortC
& ANode.ImageIndex := ASortC
//GetChildMaxIdx过程
function TfrmSetTree.GetChildMaxIdx(ANode: TTreeNode):
& Result := 0;
& for i := 0 to ANode.Count - 1 do
ANode[i].ImageIndex & Result then
Result := ANode[i].ImageI
(4).在其OnCompare事件中写入
procedure TfrmSetTree.DBTreeMainCompare(Sender: TO
& Node2: TTreeN Data: I var Compare:
& if Node1.ImageIndex &
Node2.ImageIndex then
&&& Compare :=
& else if Node1.ImageIndex = Node2.ImageIndex
&&& Compare :=
&&& Compare :=
34.在TdxDBTreeView控件的OnEditing事件中写入
AllowEdit := CheckE& //CheckEdit为判断的函数
35.选择某一行
cxgrdimport.SetF
DBTVimport.ViewData.Records[0].S
36.cxgrid单击某一网格事件,可在ViewTable的KeyPress事件中判断
if Key = #32 then
& if Trim(colname.EditValue) = '' then
colcode.FocusWithSelection
& //& colReqNum.Editing :=
37.动态生成列
& procedure CreateDynamicC
&&& i, B_index:
BTVgather.Bands.Add do
Caption := lcb1.T
Position.ColIndex := 2;
&&& for i :=
4 to dsgather.DataSet.FieldCount - 1 do
with BTVgather.Bands.Add do
Position.BandIndex := 2;
B_index := I
Caption := dsgather.DataSet.Fields[i].FieldN
with BTVgather.CreateColumn do
Position.BandIndex := B_
Caption := dsgather.DataSet.Fields[i].FieldN
DataBinding.FieldName :=
dsgather.DataSet.Fields[i].FieldN
PropertiesClassName := 'TcxCurrencyEditProperties';
TcxCurrencyEditProperties(Properties).DisplayFormat :=
',0.00;-,0.00';
Width := 80;
OnGetDisplayText := Self.OnGetDisplayT
BTVgather.Bands[2].ChildBandCount = 1 then
BTVgather.Bands[2].Width := 90
BTVgather.Bands[2].Width := BTVgather.Bands[2].ChildBandCount *
38.如何判断cxgrid单击了哪一列
procedure TFormModel.cxGrid1DBTableView1CellClick(
& Sender: TcxCustomGridTableV
& ACellViewInfo: TcxGridTableDataCellViewI
AButton: TMouseB
& AShift: TShiftS var AHandled:
& ShowMessage(ACellViewInfo.Item.Caption);
:=ACellViewInfo.GridRecord.Values[ACellViewInfo.Item.Index];
& //showmessage(s);
39.改变CheckBox后直接提交(在PropertiesEditValueChanged中实现)
首先要设置此字段的options-&Editing为True,然后写入代码(假设此字段为ViewDataColumn11):
TfrmMain.ViewDataColumn11PropertiesEditValueChanged(
& Sender: TObject);
& RecMark:
& ViewData.NavigatorButtons.Post.C
(FBiz.QryData1.FieldByName('PrintFlag').AsInteger=0) and
(FBiz.QryData1.FieldByName('BillNo').AsInteger=0) then
&&& RecMark
:=FBiz.QryData1.B
FBiz.QryData1.DisableC
ExecQuery(qryRemote1,'update main set PrintFlag=0 where type='
FBiz.QryData1.FieldByName('Type').AsString);
ShowQuery(FBiz.QryData1,'select * from Main order by
Type,Code,BillNo');
FBiz.QryData1.EnableC
FBiz.QryData1.Bookmark :=RecM
40.根据数据改变行的颜色
procedure TfrmMain.ViewDataStylesGetContentStyle(
& Sender: TcxCustomGridTableV ARecord:
TcxCustomGridR
& AItem: TcxCustomGridTableI out AStyle:
TcxStyle);
& if (ARecord.Values[ViewDataColumn2.Index]=0)
(ARecord.Values[ViewDataColumn3.Index]=999999) then
&&& AStyle
:=cxStyle4;
41.动态生成汇总列
procedure TfrmMain.CreateDynamicC
& csgItem: TcxDataSummaryI
{$IFDEF Test}codesite.SendMsg('1'); {$ENDIF}
btv2.DataController.Summary.FooterSummaryItems.C
& for i := 0 to dsview2.DataSet.FieldCount - 1
btv2.DataController.Summary.BeginU
btv2.CreateColumn do
Caption := dsview2.DataSet.Fields[i].FieldN
{$IFDEF Test}codesite.SendMsg(Caption); {$ENDIF}
DataBinding.FieldName := dsview2.DataSet.Fields[i].FieldN
HeaderAlignmentHorz := taC
if i & 0 then
PropertiesClassName := 'TcxCurrencyEditProperties';
if (i mod 2) = 0 then
TcxCurrencyEditProperties(Properties).DisplayFormat :=
',0.00;-,0.00';
csgItem :=
btv2.DataController.Summary.FooterSummaryItems.A
csgItem.ItemLink := BTV2.Columns[i];
csgItem.Kind := skS
csgItem.Position := spF
TcxCurrencyEditProperties(Properties).DisplayFormat :=
{$IFDEF Test}codesite.SendMsg('2'); {$ENDIF}
if i & 1 then
Position.BandIndex := 1;
if i = 0 then
Width := 78
if i = 1 then
Width := 96
Width := 84;
{$IFDEF Test}codesite.SendMsg('3'); {$ENDIF}
BTV2.Bands[0].Width := 78 96;
BTV2.Bands[1].Width := BTV2.Bands[1].ChildBandCount * 84;
btv2.DataController.Summary.EndU
》》》》》》》》》》》》》》
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 则提供了卡片方式的显示数据的功能,这个用在比如人事档案管理比较不错;
cxgrid (数据库控件)控件的使用
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&&&
⑴第一步得到选择的总数&&&
cxGrid1DBTableView1.DataController.GetSelectedC&&&&&
⑵循环所有所选择的记录&&&
for n := 0 to icount-1
begin&&&&&
⑶将选择记录的索引转换为数据集的索引&&&&&
cxGrid1DBTableView1.DataController.GetSelectedRowIndex(n);&&&&&&
如果cxgriddbtableview没有设置排序,那么第一种方法也是正确的(因为cxgriddbtableview显示&&&&&
的数据和qrymast显示的数据顺序是一样的)&&&&&&&&&&
//这是第一种方法,取qrymast的数据&&&&&
//因为qrymast的记录是从1开始的&&&&&
qryMast.RecNo :=
得到需要的数据值&&&&&
listbox1.Items.Add(qrymast.fields[0].asstring);&&&&&&
//这是第二种方法,取cxGrid1DBTableView1.ViewData的数据&&&&
then&&&&&&&
&cxGrid1DB.DataController.GotoFirst&&&&&
else&&&&&&&
&cxGrid1DBTableView1.DataController.RecNo :=
cxGrid1DBTableView1.ViewData.Rows[i].Values[0];&&&&&
&listbox1.Items.Add(str);&&&&
&&&&&&&&&&
(一次测试的时候,cxGrid1DBTableView1.DataController.RecNo :=
0;语句会报错,如果改为cxGrid1DB.DataController.GotoFirst,就没有问题)&&&
当有时候用到ACellViewInfo.GridRecord.Values[2]时候,由于values[2]是一个变体&&&&
类型Variant,而如果这个时候相应的字段值如果为空,下面这样用就会报错。&&&&
EdtMperson.text :=
ACellViewInfo.GridRecord.Values[2];&&&&
可以先判断一下:&&&&&
ACellViewInfo.GridRecord.Values[4]&&null
then&&&&&&&
&MemRdesc.Lines.Text :=
ACellViewInfo.GridRecord.Values[4];
已投稿到:下次自动登录
现在的位置:
& 综合 & 正文
关于cxGrid的使用
1. 去掉cxGrid中台头的Box
解决:在tableview1的ptionsview的groupbybox=
*****************************************************************************
2.统计功能
解决:(1) tableview
tableview1的optionsviewfooter=ture
然后在cxGRid1的customize..中的summary 的footer.add需要合计的列kind= skSum
在Footer的第一列显示[合计:]
加一个Summary项,Column设为Grid的第一列,Kind设为skNone
在该Summary项的OnGetText事件中,输入:
procedure TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(
Sender: TcxDataSummaryI const AValue: V AIsFooter: B var AText: String);
begin AText := '合计:';
(2) 按条件汇总:
在TableView的DataController-&Summary-&FooterSummary-&OnSummary事件中,输入:
procedure TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(
ASender: TcxDataSummaryI Arguments:
TcxSummaryEventArguments; var OutArguments: TcxSummaryEventOutArguments);
begin //得到字段名 TcxDBDataSummaryItem(Arguments.SummaryItem).FieldN
if (ASender.DataController.Values[Arguments.RecordIndex,
tvExpenseLevel.Index] & 1) //只统计Level列=1的值
and (TcxDBDataSummaryItem(Arguments.SummaryItem).Kind
= skSum) then OutArguments.Value := 0; //Level & 1的统计值设为0
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=
****************************************************************************
4.让“Drag a column here to group by that column”不显示解决:在cxGrid1DBTableView1-&optionsview-&groupbybox:=false即可
****************************************************************************
5.GroupPanel上面的英文[Drag a column header to group by that column]怎么可以改成中文
解决:最简单的方法是 TcxGridTableView.OnCustomDrawPartBackground,
也可用 OnCustomDrawGroupCell:
procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(
Sender: TcxGridTableV ACanvas: TcxC
AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);
AViewInfo.Text:='动态设置 GroupBox 的显示内容';
ACanvas.FillRect(AViewInfo.Bounds);
注:改成中文后将字段拖上去中文还是会显示,最好是设置空值
****************************************************************************
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,Band1
Band0的Fixed=tfLeft
Band1的Fixed=tfnone
设置要锁定的字段的BandIndex=0,其它为1,就OK了。
*******************************************************************************
9. 怎样实现如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 类似的功能。
****************************************************************************
10. 鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout什么用,怎么使用?
解决:可以拖动字段,并列的可以拖成有层次感(一层层), 拖动时会显示箭头的,就是说可以拖一个字段放
****************************************************************************
11.怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT
解决:uses
cxExportGrid4L ( cxExportGrid6Link)
procedure TForm1.Button1Click(Sender: TObject);
ExportGrid4ToEXCEL('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);
****************************************************************************
12. 如何使满足条件的数据显示不同的颜色?
AYellowStyle: TcxS
procedure TForm1.FormCreate(Sender: TObject);
AYellowStyle := TcxStyle.Create(Self);
AYellowStyle.Color := $0080FFFF;
AYellowStyle.TextColor := clM
procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableV ARecord: TcxCustomGridR
AItem: TcxCustomGridTableI out AStyle: TcxStyle);
if ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index] & 81 then
AStyle := AYellowS
这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示黄色
****************************************************************************13. 如何从外边的TXT文件导入到cxGrid?
procedure CustomizeC
procedure LoadD
procedure TForm1.CustomizeC
cDistance = 1;
cRadius = 5;
cPeriod = 4;
cPstring = 0;
DecimalSeparator := '.';
with cxGrid1TableView2 do
for I := 0 to ColumnCount - 1 do
if I in [cDistance, cRadius] then
Columns[I].DataBinding.ValueTypeClass := TcxIntegerValueType//1,5列为Integer
if I in [cPstring,cPeriod] then
Columns[I].DataBinding.ValueTypeClass := TcxStringValueType//0,4列为String
Columns[I].DataBinding.ValueTypeClass := TcxFloatValueT//其他为Float
procedure TForm1.LoadD
AFileName = '资产负债表.txt';
AHeaderLineCount = 2;
ARecords, AValues: TStringL
procedure InitRecord(const Str: string);
AValues.CommaText := S
for J := 0 to AValues.Count - 1 do
if AValues.Strings[J] && '-' then
V := AValues.Strings[J];
if not VarIsNull(V) then
cxGrid1TableView2.DataController.Values[I, J] := V;
if not FileExists(AFileName) then
raise Exception.Create('Data file not found');
ARecords := TStringList.C
AValues := TStringList.C
with ARecords do
LoadFromFile(AFileName);
cxGrid1TableView2.BeginU
cxGrid1TableView2.DataController.RecordCount := Count - AHeaderLineC
for I := 0 to Count - (AHeaderLineCount + 1) do
InitRecord(Strings[I + AHeaderLineCount]);
cxGrid1TableView2.EndU
ARecords.F
procedure TForm1.FormCreate(Sender: TObject);
CustomizeC
LoadData_Z
****************************************************************************14 如何改变列的颜色?
AFirstColumnStyle: TcxS
procedure TForm1.FormCreate(Sender: TObject);
AFirstColumnStyle := TcxStyle.Create(Self);
AFirstColumnStyle.Color := clA
AFirstColumnStyle.TextColor := clB
cxGrid1TableView1.Columns[1].Styles.Content := AFirstColumnS
****************************************************************************15 Set as default的用法?
解决:Set as default的用法是为了解决设置参数的方便而做的,比如:
连好数据库以后,更改cxGrid1DBBandedTableView1-&OptionsCustomize-& ColumnFiltering 设为False。(这个设置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1-&OptionsView- &Navigator 设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set as default。
OK,下次你再产生一个新的cxGrid1DBBandedTableView1时这些设置和刚才的一样了。如果需要设置的参数很多的时候,这个Set as default很有用!
****************************************************************************16. 怎样使鼠标移动时,相应的单元里的文字变色?
FTrackItem: TcxCustomGridTableI
FTrackRec: TcxCustomGridR
procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableV ACanvas: TcxC
AViewInfo: TcxGridTableDataCellViewI var ADone: Boolean);
if (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem) then
ACanvas.Font.Color := //红色字体
ACanvas.Font.Style := [fsUnderline];//带下划线
procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TO
Shift: TShiftS X, Y: Integer);
AHitTest: TcxCustomGridHitT
ATrackItem: TcxCustomGridTableI
ATrackRec: TcxCustomGridR
ATrackItem := FTrackI
ATrackRec := FTrackR
AHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
if AHitTest is TcxGridRecordCellHitTest then
FTrackItem := TcxGridRecordCellHitTest(AHitTest).I
FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridR
FTrackItem :=
FTrackRec :=
if (ATrackItem && FTrackItem) or (ATrackRec && FTrackRec) then
// Invalidate old cell
if ATrackRec && nil then
ATrackRec.Invalidate(ATrackItem);
// Invalidate new cell
if FTrackRec && nil then
FTrackRec.Invalidate(FTrackItem);
****************************************************************************
zj注:17-27转载自
17. 怎样设计多表头的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 |
不知道有谁能实现这样的多表头?
****************************************************************************18. 在主从表结构时,当点开“+”时怎样将焦点聚在相应主表的记录上?
HitTest: TcxCustomGridHitT
procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TO
Button: TMouseB Shift: TShiftS X, Y: Integer);
// Note that the Sender parameter is a Site
HitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
// The point belongs to the [+]/[-] button area
if HitTest is TcxGridExpandButtonHitTest then
// Move focus to the record
TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := T
****************************************************************************19 CXGrid4如何展开全部节点
解决:GridDBTableView1.DataController.Groups.FullE
****************************************************************************20. cxGrid如何动态创建Items的Editor的项?
解决:cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为
combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)
A:TDataSource:
B:TcxlookupcomboboxPropert
A:=TDataSource.create(self);
B:=tcxlookupcomboboxproperties.create(self);
A.Dataset:=Dic_ry_//此处指定数据源。
b.listdource:=a;//此处指明字段的listsource属性。
b.keyfieldnames:='a'; //此处指明字段的关键字段
b.listfieldnames:='b'; //此处指明字段的返回值。
b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。
cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。
//这个是初始化的代码
****************************************************************************21. 拷贝文件时有进度显示
procedure TForm1.mycopyfile(sourcef,targetf:string);
FromF, ToF:
NumRead, NumWritten: I
Buf: array[1..2048] of C
beginAssignFile(FromF, sourcef);Reset(FromF, 1); { Record size = 1 }AssignFile(ToF,targetf); { Open output file }Rewrite(ToF, 1); { Record size = 1 }n:=0;repeatBlockRead(FromF, Buf, SizeOf(Buf), NumRead);form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';application.ProcessM//显示进度BlockWrite(ToF, Buf, NumRead, NumWritten);inc(n);until (NumRead = 0) or (NumWritten && NumRead);form1.Label1.Caption:='100%';CloseFile(FromF);CloseFile(ToF);
procedure TForm1.Button1Click(Sender: TObject);
mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip');
****************************************************************************22. cxGrid 设置斑马线
在TcxGridDBBandedTableView.Styles属性中有 ContentEven(奇数行风格) ContentOdd (偶数行风格) ,设定一下风格就好了。
****************************************************************************23 根据记录内容更改字体颜色
参考范例CustomDrawTableViewDemo,
主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中实现。
如下代码:
if (Pos('-',AViewInfo.GridRecord.DisplayTexts[colOrderProductCount.Index]) & 0) then
begin //标识负数记录//ACanvas.Canvas.Brush.Color:= clMoneyGACanvas.Canvas.Font.Color:= clR//clActiveCaption
其中colOrderProductCount是“产品订数”列。
还要有一步就是要刷新显示
TcxGridDBBandedTableView.LayoutChanged();
//tvCars.LayoutChanged(False);
TcxGridDBBandedTableView.Painter.I
****************************************************************************24 用代码展开/收缩主从结构
解决:Self.tvDepartment.ViewData.Expand(True); Self.tvDepartment.ViewData.Collaspe(True);
注:tvDepartment为主表对应的TableView
****************************************************************************25 在内置右键菜单的后面增加菜单项
首先应在Form上加一个cxGridPopupMenu控件 以启用右键菜单
UseBuildInPopupMenus设为True
procedure TFormItemList.FormCreate(Sender: TObject);
var AMenu: TC FMenuItem, FSubMenuItem: TMenuI
begin AMenu :=
if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then E AMenu := cxGridPopupMenu.BuiltInPopupMenus[0].PopupM //第一个内置右键菜单(表头菜单)
if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu)
then begin TPopupMenu(AMenu).AutoHotkeys :=
maM //手动热键 //------------------------- FMenuItem := TMenuItem.Create(Self);
FMenuItem.Caption := '-'; FMenuItem.Name := 'miLineForGroup';
TPopupMenu(AMenu).Items.Add(FMenuItem);
//展开所有组 FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miExpandAllGroup';
【上篇】【下篇】

我要回帖

更多关于 显示器型号cx240 的文章

 

随机推荐