zoukankan      html  css  js  c++  java
  • cxGrid的使用方法

    cxGrid的使用方法

    1. 去掉cxgrid中台头的box ,在tableview1的ptionsview的groupbybox=false;
    2. 在GRID footer 中加入sum(列), tableview1的optionsviewàfooter=ture
    然后在cxGRid1的customize..中的summary 的footer.add需要合计的列kind= skSum
    3. 去掉cxgrid 中的过滤下拉箭头 选择tableview1.optionscustomize.columnfiltering=fasle;
    4. cxGrid1DBTableView1 的 OptionView中屬性GroupFooters設為gfAlwaysVisible並設置需要求和的列,在summary.default for Groups 下add加入需要合计的字段,column下显示fieldname 为统计字段,format为格式,kind为统计方法,position 为位子 spfooter 在分组的下面,spgroup 在分组的上面
    或用cxGridPopupMenu1,在運行時可對任意數字類型列求和,方法是只需設置cxGridPopupMenu1的屬性Grid為cxGrid1DBTableView1的cxGrid,
    即可實現您所需功能
    5. DEV Express里的cxGrid默认的数值格式带¥,怎么去掉啊!
    6. 雙擊Cxgrid,選擇colmnum改變類型 options.properties.Memo
    7. 在displayformat中进行设置

    设置行高
    在cxGridDBTableView1.OptionsView.DataRowHeight

    改变字体在
    cxStyleRepository 双击它,在里面添加GridTableViewStyleSheetDevExpress
    然后改变Style标签里面的cxStyle的字体就可以控制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[I].DataBinding.ValueTypeClass := TcxIntegerValueType//1,5列为Integer
    else
    if I in [cPstring,cPeriod] then
    Columns[I].DataBinding.ValueTypeClass := TcxStringValueType//0,4列为String
    else
    Columns[I].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; //这个是初始化的代码,

  • 相关阅读:
    springmvc log4j 配置
    intellij idea maven springmvc 环境搭建
    spring,property not found on type
    intellij idea maven 工程生成可执行的jar
    device eth0 does not seem to be present, delaying initialization
    macos ssh host配置及免密登陆
    centos7 搭建 docker 环境
    通过rest接口获取自增id (twitter snowflake算法)
    微信小程序开发体验
    gitbook 制作 beego 参考手册
  • 原文地址:https://www.cnblogs.com/levin/p/1534449.html
Copyright © 2011-2022 走看看