Delphi CxGrid 汇总(2)

时间:2021-12-03 04:33:58

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. 在主从表布局时,当点开“+”时怎样将焦点聚在相应主表的记录上?
解决:
var
HitTest: TcxCustomGridHitTest;

procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// 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 := True;
end;

****************************************************************************
19 CXGrid4如何展开全部节点
解决:GridDBTableView1.DataController.Groups.FullExpand;

****************************************************************************
20. cxGrid如何动态创建Items的Editor的项?
解决:cxGrid的列有一个属性,它的编纂框可以指定combobox,spinedit等.在设计时,可以为
combobox的items添加项目.请问是否可以动态创建?(run-time时由措施插手)

[delphi] 

 

var A:TDataSource: B:TcxlookupcomboboxProperties; begin A:=TDataSource.create(self); B:=tcxlookupcomboboxproperties.create(self); A.Dataset:=Dic_ry_xb;//此处指定数据源。 b.listdource:=a;//此处指明字段的listsource属性。 b.keyfieldnames:=a; //此处指明字段的关键字段 b.listfieldnames:=b; //此处指明字段的返回值。 b.listcolumns.items[0].caption:=x; //此处默认是会成立一个字段,但是显示的表头是name,所以此处让它显示为本身想要的中午显示。 cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是阿谁字段。 end; //这个是初始化的代码

****************************************************************************
21. 拷贝文件时有进度显示
解决:

[delphi] 

 

procedure TForm1.mycopyfile(sourcef,targetf:string); var FromF, ToF: file; NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; n:integer; begin AssignFile(FromF, sourcef); Reset(FromF, 1); { Record size = 1 } AssignFile(ToF,targetf); { Open output file } Rewrite(ToF, 1); { Record size = 1 } n:=0; repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+100%; application.ProcessMessages; //显示进度 BlockWrite(ToF, Buf, NumRead, NumWritten); inc(n); until (NumRead = 0) or (NumWritten <> NumRead); form1.Label1.Caption:=100%; CloseFile(FromF); CloseFile(ToF); end; procedure TForm1.Button1Click(Sender: TObject); begin mycopyfile(e:/components/tv2k-w2k.zip,c:/a.zip); end;

****************************************************************************
22. cxGrid 设置斑马线
解决:
在TcxGridDBBandedTableView.Styles属性中有 ContentEven(奇数行气势派头) ContentOdd (偶数行气势派头) ,设定一下气势派头就好了。
****************************************************************************
23 按照记录内容变动字体颜色
解决:
参考典型CustomDrawTableViewDemo,
主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中实现。
如下代码: