java

位置:IT落伍者 >> java >> 浏览文章

分享一下ExpressQuantumGrid4的cxGrid的一些使用方法和经验


发布日期:2020年07月31日
 
分享一下ExpressQuantumGrid4的cxGrid的一些使用方法和经验
使用cxGrid有一些时间了在这里总结一下使用cxGrid的一些方法希望给刚开始接触cxGrid的人一些帮助

简单介绍cxGrid右下方的cxGridLevel是表示Grid表的层cxGrid可以有多层这相当于集合了PageControl的功能而cxGridLevel右边的cxGridDBTableView相当于DBGrid一样右击cxGrid可以添加cxGridLevel右击cxGridLevel可以选择Create View Add level 或者Delete LevelAdd level可以增加子LevelCreate View里面可以选择很多不同总类的View其中

)DB Table可以和数据库连接的View更一般的DBGrid类似它比DBGrid多了比如鼠标中键可以用可以统计查询等等功能

)DB Banded Table 则可以实现比如

| 说明 | 说明 |

| 字段 | 字段 | 字段 | 字段 |

等类似的功能

)DB Card View 则提供了卡片方式的显示数据的功能这个用在比如人事档案管理比较不错

)其它不一一赘述

一些使用方法

)有图片和MEMO的例子

拖入一个cxGridTableDataSource

Table的DatabaseName设为DBDEMOSTableName设为biolifedbActive设为True;

DataSource的DataSet设为Table

cxGridDBTableView的DataController中的DataSource 设为DataSource;

右击cxGridDBTableView选择Create All Columns

双击cxGrid在弹出的窗口中找到 cxGridDBTableViewNotes和cxGridDBTableViewGraphic将它们的Properties属性设为BlobEdit

运行看看结果

再将cxGridDBTableViewGraphic的Properties属性设为Image再将Properties下的Stretch设为True将cxGridDBTableView>optionsview>CellAutoHeight 设为True看看结果

)如何让Drag a column here to group by that column不显示

解决点击cxGrid上的cxGridDBTableView

在cxGridDBTableView>optionsview>groupbybox:=false即可

OptionsView里面有很多属性可能经常要用比如ColumnAutoWithNavigator等等慢慢琢磨吧:)

)GroupPanel上面的英文[Drag a column header to group by that column]怎么可以改成中文?

解决最简单的方法是 TcxGridTableViewOnCustomDrawPartBackground 也可用OnCustomDrawGroupCell

procedure TFormcxGridDBTableViewCustomDrawPartBackground(Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);

begin

AViewInfoText:=动态设置 GroupBox 的显示内容;

ACanvasFillRect(AViewInfoBounds);

end;

)如何实现如下功能

+财务部

+原材料仓库

+成品库

+沖压车间

+软件开发部

这个是部门的名称点击加号就可以将本部门的人员情况显示出来

解决其实这是一个主从表关系

填好主表的keyfieldnames

填好从表的keyfieldnames

填好从表的detaikeyfieldNames与masterkeyfieldnames

: 从表的数据源一定要按与主表关联的字段排序

其它地方设置了主从表结构那样就显示不出来比如设置了从表的Table或者Query的mastersource和asterfield就会不能显示数据!如果是两个cxGrid的主从关系这样设置就很OK了

)统计功能

解决cxGridDBTableView>optionsview>Footer 设为True

cxGridDBTableView>DataController>Summary设置FooterSummaryItems即可

)类似PageControl显示

解决增加一个Level将cxGrid>RootLevelOptions>DetailTabsPosition设为dtpTop然后相应的设置cxGridLevel和cxGridLevel的Caption值

)如何设定左边几列不能滚动?

解决使用DB Banded Table才可以实现

在cxGridDBBandedTableView里建立BandBand

Band的Fixed=tfLeft

Band的Fixed=tfnone

设置要锁定的字段的BandIndex=其它为就OK了

)怎样实现如EXCEL一样的当前格=G+G+G 这样的功能

解决举一个简单的例子

labelCaption := cxGridDBTableViewDataControllerValues[] + cxGridDBTableViewDataControllerValues[]   + cxGridDBTableViewDataControllerValues[ ];

所以不同cxGridDBTableView中的数据都可以给当前格这样就做到了EXCEL中的当前格=G+G+G 类似的功能

)鼠标右击cxGridDBBandedTableView菜单里的Edit Layout什么用怎么使用?

解决可以拖动字段并列的可以拖成有层次感(一层层) 拖动时会显示箭头的就是说可以拖一个字段放到最上面就可以使记录按此字段进行分组点击其中一个字段上面还会出现一个上升或者下降的小三角形这个小三角形的作用是在运行阶段数据就会按照这个字段上升或者下降排序还有一个Set as Default的作用是保持当前TableView的参数下此产生新的TableView的时候就会可以和上次保持的参数一样

)怎样将cxGrid里的数据导入到EXCELHTMLXML和TEXT

解决这个问题在用了cxGrid以后变得异常简单

uses

cxExportGridLink;

procedure TFormButtonClick(Sender: TObject);

begin

ExportGridToEXCEL(d:\wangxslcxGridTrueTrue);

ExportGridToTEXT(d:\wangtxtcxGridTrueTrue);

ExportGridToXML(d:\wangxmlcxGridTrueTrue);

ExportGridToHTML(d:\wanghtmlcxGridTrueTrue);

end;

)如何使满足条件的数据显示不同的颜色?

解决

var

AYellowStyle: TcxStyle;

procedure TFormFormCreate(Sender: TObject);

begin

//行颜色

AYellowStyle := TcxStyleCreate(Self);

AYellowStyleColor := $FFFF;

AYellowStyleTextColor := clMaroon;

end;

procedure TFormcxGridDBBandedTableViewStylesGetContentStyle(

Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;

Item: TcxCustomGridTableItem; out AStyle: TcxStyle);

begin

if ARecordValues[cxGridDBBandedTableViewLengthcmIndex] < then

AStyle := AYellowStyle;

end;

这里cxGridDBBandedTableViewLengthcmIndex小于时就显示黄色

问题)如何从外边的TXT文件导入到cxGrid?

解决procedure CustomizeColumns;

procedure LoadData;

procedure TFormCustomizeColumns;

const

cDistance = ;

cRadius = ;

cPeriod = ;

cPstring = ;

var

I: Integer;

begin

DecimalSeparator := ;

with cxGridTableView do

for I := to ColumnCount do

if I in [cDistance cRadius] then

Columns[I]DataBindingValueTypeClass := TcxIntegerValueType

//列为Integer

else

if I in [cPstringcPeriod] then

Columns[I]DataBindingValueTypeClass := TcxStringValueType

//列为String

else

Columns[I]DataBindingValueTypeClass := TcxFloatValueType;

//其他为Float

end;

procedure TFormLoadData;

const

AFileName = 资产负债表txt;

AHeaderLineCount = ;

var

ARecords AValues: TStringList;

I: Integer;

procedure InitRecord(const Str: string);

var

J: Integer;

V: Variant;

begin

AValuesCommaText := Str;

for J := to AValuesCount do

if AValuesStrings[J] <> then

begin

V := AValuesStrings[J];

if not VarIsNull(V) then

cxGridTableViewDataControllerValues[I J] := V;

end;

end;

begin

if not FileExists(AFileName) then

raise ExceptionCreate(Data file not found);

ARecords := TStringListCreate;

AValues := TStringListCreate;

with ARecords do

try

LoadFromFile(AFileName);

cxGridTableViewBeginUpdate;

cxGridTableViewDataControllerRecordCount := Count AHeaderLineCount;

for I := to Count (AHeaderLineCount + ) do

InitRecord(Strings[I + AHeaderLineCount]);

finally

cxGridTableViewEndUpdate;

ARecordsFree;

AValuesFree;

end;

end;

procedure TFormFormCreate(Sender: TObject);

begin

CustomizeColumns;

LoadData_Zcfz;

end;

其中资产负债表txt中的数据如下

资 产 行次 年初数 期末数 负债及所有者权益 行次 年初数 期末数

流动资产 流动负债

)如何改变列的颜色?

var

AFirstColumnStyle: TcxStyle;

procedure TFormFormCreate(Sender: TObject);

begin

//列颜色

AFirstColumnStyle := TcxStyleCreate(Self);

AFirstColumnStyleColor := clAqua;

AFirstColumnStyleTextColor := clBlue;

cxGridTableViewColumns[]StylesContent := AFirstColumnStyle;

end;

)Set as default的用法?

解决Set as default的用法是为了解决设置参数的方便而做的比如

连好数据库以后更改cxGridDBBandedTableView>OptionsCustomize>ColumnFiltering 设为False(这个设置可以将字段名的下拉单给去掉)更改cxGridDBBandedTableView>OptionsView>Navigator 设置为True然后右击cxGridDBBandedTableView在弹出的菜单栏里面点击Set as default

OK下次你再产生一个新的cxGridDBBandedTableView时这些设置和刚才的一样了如果需要设置的参数很多的时候这个Set as default很有用!

)怎样使鼠标移动时相应的单元格里的文字变色?

解决

var

FTrackItem: TcxCustomGridTableItem;

FTrackRec: TcxCustomGridRecord;

procedure TFormcxGridDBTableViewCustomDrawCell(

Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;

AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);

begin

if (AViewInfoGridRecord = FTrackRec) and (AViewInfoItem = FTrackItem) then

begin

ACanvasFontColor := clred; //红色字体

ACanvasFontStyle := [fsUnderline];//带下划线

end;

end;

procedure TFormcxGridDBTableViewMouseMove(Sender: TObject;

Shift: TShiftState; X Y: Integer);

var

AHitTest: TcxCustomGridHitTest;

ATrackItem: TcxCustomGridTableItem;

ATrackRec: TcxCustomGridRecord;

begin

ATrackItem := FTrackItem;

ATrackRec := FTrackRec;

AHitTest := (Sender as TcxGridSite)GridViewViewInfoGetHitTest(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

ATrackRecInvalidate(ATrackItem);

// Invalidate new cell

if FTrackRec <> nil then

FTrackRecInvalidate(FTrackItem);

end;

end;

)怎样设计多表头的cxGrid?

解决cxGrid可以解决如下的表头

| 说明 | 说明 |

| 字段 | 字段 | 字段 | 字段 |

|字段|字段  |

|字段| 字段 | 字段 |

实现这个很简单你可以直接在上面拖动字段名拖动时会显示箭头的放入你想显示的位置就OK了或者在鼠标右击cxGridDBBandedTableView菜单里的Edit Layout里也可以拖放

但是cxGrid不能实现如下的多表头形式

| 说明 | 说明 |

| 说明 | 说明 | 说明 | 说明 |

| 字段 | 字段 |

| 字段 | 字段 | 字段 |

不知道有谁能实现这样的多表头?

)在主从表结构时当点开+时怎样将焦点聚在相应主表的记录上?

解决

var

HitTest: TcxCustomGridHitTest;

procedure TColumnsShareDemoMainFormtvProjectsMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X Y: Integer);

begin

// Note that the Sender parameter is a Site

HitTest := (Sender as TcxGridSite)GridViewViewInfoGetHitTest(X Y);

// The point belongs to the [+]/[] button area

if HitTest is TcxGridExpandButtonHitTest then

// Move focus to the record

TcxGridExpandButtonHitTest(HitTest)GridRecordFocused := True;

end;

以上是在用cxGrid时候碰到的一些问题我总结了一部分还有很多问题等待解决在这里我希望用过cxGrid的人帮着一起总结一下让后学者可以少走点弯路!

               

上一篇:Windows和Linux系统下的JAVA程序运行方法

下一篇:在Java中保留Stereotype