CxGrid用法

CxGrid用法

CxGrid用法- –

运用cxGrid有一对年华了,在此处总括一下拔取cxGrid的一部分办法,希望给刚起头接触cxGrid的人有的拉扯。

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
则提供了卡片情势的突显数据的效能,那些用在诸如人事档案管理比较科学;
  4)此外不一一赘述。

2.部分利用格局:
  1)有图片和MEMO的例子:
    拖入一个cxGrid1,Table1,DataSource1。
Table1的DatabaseName设为DBDEMOS,TableName设为biolife.db,

  
Active设为True;DataSource1的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,看看结果。

  2)如何让“Drag a column here to group by that column”不显示
    解决:点击cxGrid1上的cxGrid1DBTableView1
    在cxGrid1DBTableView1->optionsview->groupbybox:=false即可 
   
注:OptionsView里面有成百上千属性可能时时要用,比如:ColumnAutoWith,Navigator等等,渐渐探究吧:)
   
  3)GroupPanel下边的英文[Drag a column header to group by that
column]怎么可以改成粤语?
    解决:最简便的章程是 TcxGridTableView.OnCustomDrawPartBackground
,也可用 OnCustomDrawGroupCell:

    procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(
               Sender: TcxGridTableView; ACanvas: TcxCanvas;
              AViewInfo: TcxCustomGridCellViewInfo; var ADone:
Boolean);
    begin
      AViewInfo.Text:=’动态设置 GroupBox 的呈现内容’;
      ACanvas.FillRect(AViewInfo.Bounds);
    end;

  4)如何实现如下效果:
           +财务部
           +原材料仓库
           +成品库
           +冲压车间
           +软件开发部
    这多少个是机关的名号,点击加号就足以将本机关的人手情形突显出来。
    解决:其实这是一个主从表关系,1:填好主表的keyfieldnames
                                  2:填好从表的keyfieldnames
                                 
3:填好从表的 detaikeyfieldNames与masterkeyfieldnames
                                  4:
从表的数据源一定要按与主表关联的字段排序
  
注:其余地点设置了主从表结构那样就显得不出去,比如设置了从表的Table或者Query的mastersource和
  
asterfield就会无法显得数据!假倘若三个cxGrid的主从关系,这样设置就很OK了。

 5)总计功用
   解决:cxGrid1DBTableView1->optionsview->Footer 设为True
        
cxGrid1DBTableView1->DataController->Summary设置FooterSummaryItems即可 

 6)类似PageControl显示
  
解决:扩张一个Level,将cxGrid1->RootLevelOptions->DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。

  未完待续。。。。。。。。。 

7)如何设定左侧几列,无法滚动?
   解决:使用DB Banded Table才可以兑现,
         在cxGrid1DBBandedTableView里建立Band0,Band1
         Band0的Fixed=tfLeft
         Band1的Fixed=tfnone
         设置要锁定的字段的BandIndex=0,此外为1,就OK了。  
 
 8)怎么着实现如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
类似的效能。
 
 9)鼠标右击cxGrid1DBBandedTableView1菜单里的Edit
Layout什么用,怎么使用?
   解决:可以拖动字段,并列的可以拖成有层次感(一稀罕),
拖动时会呈现箭头的,就是说能够拖一个字段放

到最下边,就足以使记录按此字段举行分组。点击其中一个字段,下面还会现出一个升起依然降低的小三角形,那个

小三角形的效用是在运作阶段,数据就会听从这多少个字段上升依旧降低排序。
    还有一个Set as
Default的机能是维系近来TableView的参数,下此发生新的TableView的时候就会可以和上次维持的参数一样。这一个还未曾做过考试。

10)如何将cxGrid里的数量导入到EXCEL,HTML,XML和TEXT
  解决:这一个题材在用了cxGrid将来变得不行简单,
uses
 cxExportGrid4Link;

procedure TForm1.Button1Click(Sender: TObject);
begin
 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);
end;

11)咋样使满意条件的多寡显示不同的颜料?
解决:
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] < 81
then
  AStyle := AYellowStyle;
end;

此处cxGrid1DBBandedTableView1Lengthcm.Index小于81时就展示黄色

12)怎样从外边的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, cRadius] then
     Columns.DataBinding.valueTypeClass :=
TcxIntegervalueType//1,5列为Integer
   else
     if I in [cPstring,cPeriod] then
     Columns.DataBinding.valueTypeClass :=
TcxStringvalueType//0,4列为String
     else
      Columns.DataBinding.valueTypeClass :=
TcxFloatvalueType;//其他为Float
end;

procedure TForm1.LoadData;
const
 AFileName = ‘资产负债表.txt’;
 AHeaderLineCount = 2;

var
 ARecords, Avalues: TStringList;
 I: Integer;

 procedure InitRecord(const Str: string);
 var
   J: Integer;
   V: Variant;
 begin
   Avalues.CommaText := Str;
   for J := 0 to Avalues.Count – 1 do
    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(‘Data file 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 – (AHeaderLineCount + 1) do
     InitRecord(Strings[I + AHeaderLineCount]);
 finally
   cxGrid1TableView2.EndUpdate;
   ARecords.Free;
   Avalues.Free;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CustomizeColumns;
 LoadData_Zcfz;
end;

13)如何转移列的颜色?
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;

14)Set as default的用法?
 解决:Set as default的用法是为了化解安装参数的福利而做的,比如:
      
连好数据库未来,更改cxGrid1DBBandedTableView1->OptionsCustomize->ColumnFiltering
设为False。(这些装置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1->OptionsView->Navigator
设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set
as default。
 
OK,下次你再暴发一个新的cxGrid1DBBandedTableView1时这一个设置和刚刚的一致了。即便急需设置的参数很多的时候,这个Set
as default很有用!

15)如何使鼠标移动时,相应的单元里的文字变色?
  解决:
var
 FTrackItem: TcxCustomGridTableItem;
 FTrackRec: TcxCustomGridRecord;

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
 Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
 AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
 if (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem)
then
 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 is TcxGridRecordCellHitTest then
 begin
   FTrackItem := TcxGridRecordCellHitTest(AHitTest).Item;
   FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridRecord;
 end
 else
 begin
   FTrackItem := nil;
   FTrackRec := nil;
 end;

 if (ATrackItem <> FTrackItem) or (ATrackRec <> FTrackRec)
then
 begin
   // Invalidate old cell
   if ATrackRec <> nil then
     ATrackRec.Invalidate(ATrackItem);
   // Invalidate new cell
   if FTrackRec <> nil then
     FTrackRec.Invalidate(FTrackItem);
 end;
end;

16)ExpressQuantumGrid 3.2.2中的dxdbgrid和4.2版本中的cxgrid有如何界别?
有很大的区分,基本上相当于是多少个控件一样。
cxgrid是在dxdbgrid基础上完全重写的,所以cxgrid不辅助dxdbgrid
据此cxgrid里面特别提供了一个将dxdbgrid导入到cxgrid的功效。

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;

 2003-12-12 17:07:30    问题20

20)cxGrid如何动态创造Items的Editor的项?
  
cxGrid的列有一个性质,它的编辑框可以指定combobox,spinedit等.在计划时,可以为
   combobox的items添加项目.请问是否可以动态创立?(run-time时由程序参与)

解决:
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;  //这多少个是开头化的代码,

(1)动态设置显示格式
procedure SetDisplayFormat(ACtrlData: TClientDataSet;
   TbView: TcxGridDBTableView);
var
   i: integer;
begin
   if ACtrlData.RecordCount <= 0 then Exit;
   try
     TbView.ClearItems;
     ACtrlData.First;
人事档案,     for i := 0 to ACtrlData.RecordCount – 1 do
     begin
       if ACtrlData.FieldByName(‘SQBF_DisplayInGrid’).AsString = ‘1’
then //在报表中显得
       with TbView.CreateColumn do
       begin
         DataBinding.FieldName :=
ACtrlData.FieldByName(‘SQBF_FieldName’).AsString;
         Caption := ACtrlData.FieldByName(‘SQBF_Caption’).AsString;
//字段粤语题目
         Hint := ACtrlData.FieldByName(‘SQBF_Hint’).AsString;
         Width := ACtrlData.FieldByName(‘SQBF_Width’).AsInteger;
         HeaderAlignmentHorz := taCenter;
       end;
       ACtrlData.Next;
     end;
   except
     on E: Exception do
       SaveLog(‘设置彰显格式时出错:’ + E.Message);
   end;
end;

(2)显示行号
procedure TFmQueryBase.cxDBViewMasterCustomDrawIndicatorCell(
   Sender: TcxGridTableView; ACanvas: TcxCanvas;
   AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
   FValue: string;
   FBounds: TRect;
begin
   FBounds := AViewInfo.Bounds;
   if (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
   begin
     ACanvas.FillRect(FBounds);
     ACanvas.DrawComplexFrame(FBounds, clBlack, clBlack, [bBottom,
bLeft, bRight], 1);
     FValue :=
IntToStr(TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord.Index+1);
     InflateRect(FBounds, -3, -2); //Platform specific. May not work on
Linux.
     ACanvas.Font.Color := clBlack;
     ACanvas.Brush.Style := bsClear;
     ACanvas.DrawText(FValue, FBounds, cxAlignCenter or cxAlignTop);
     ADone := True;
   end;
end;
(3)设置显示格式,我的门类要求先动态增长字段,这时不晓得字段类型,所以设置DisplayFormat不便利,我还没有找到好法子。
从而采用打开数据集后再设置:
procedure TFmQueryBase.cdsMasterAfterOpen(DataSet: TDataSet);
var
   i: Integer;
begin
   for i := 0 to cxDBViewMaster.DataController.DataSet.FieldCount -1
do
   begin
     if cxDBViewMaster.DataController.DataSet.Fields[i] is
TNumericField then
     begin
       if Pos(‘AMOUNT’,
UpperCase(cxDBViewMaster.DataController.DataSet.Fields[i].FieldName))
> 0 then
       begin
        
TNumericField(cxDBViewMaster.DataController.DataSet.Fields[i]).DisplayFormat
:= ‘#,##0.000’;
         Continue;
       end;
       if Pos(‘QUANTITY’,
UpperCase(cxDBViewMaster.DataController.DataSet.Fields[i].FieldName))
> 0 then
       begin
        
TNumericField(cxDBViewMaster.DataController.DataSet.Fields[i]).DisplayFormat
:= ‘#,##0.000’;
         Continue;
       end;
        if Pos(‘MONEY’,
UpperCase(cxDBViewMaster.DataController.DataSet.Fields[i].FieldName))
> 0 then
       begin
        
TNumericField(cxDBViewMaster.DataController.DataSet.Fields[i]).DisplayFormat
:= ‘#,##0.00’;
         Continue;
       end;
    end;
   end;
end;

 

cxgrid分组自动举办

cxgrdbtblvwGrid1DBTableView1.DataController.Groups.FullExpand

 

cxgrid取得默认字段

cxgrdbtblvwGrid1DBTableView1.ClearItems;
cxgrdbtblvwGrid1DBTableView1.DataController.CreateAllItems
admin

网站地图xml地图