方法:
一、 建层和层视图
MycxGrid := TcxGrid.Create(self);
MycxGridLevel := MycxGrid.Levels.Add; //建层
MyTV:= TcxGridDBTableView(MycxGrid.createview(TcxGridDBTableView));//建视图 MycxGridLevel.Control := MycxGrid;//指定关系 MycxGridLevel.GridView := MyTV;//指定视图
TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)).GridView;//得到下层视图
二、设定表格位置和大小
MycxGrid.ParentWindow := self.Handle; MycxGrid.Top := 0;
MycxGrid.Height := 200; MycxGrid.Width := 400;
MyTV.Preview.visible := true;
三、 设定数据源及分配全部字段
MyTV.DataController.DataSource := MyDataSource; MyTV.DataController.DeleteAllItems; //清除全部字段 MyTV.DataController.CreateAllItems; //建全部显示字段
四、 动态增加显示列及列访问
var
iIndex: integer;
vCol: TcxGridDBColumn;
vImgCom: TcxImageComboBoxItem; i,j: integer;
for i:= 0 to Mydatasource.dataset.FieldCount -1 do begin
vCol := MyTV.CreateColumn;
vCol.DataBinding.FieldName:=Mydatasource.dataset.Fields[i].FieldName;
if (i = 1) then begin
vCol.PropertiesClassName := 'TcxImageComboBoxProperties'; ////分区分大小写 vCol.DataBinding.ValueType := 'String'; for j := 0 to 5 do begin
vImgCom:=TcxImageComboBoxProperties(vCol.Properties).Items.Add;
vImgCom.Description := IntToStr(j); vImgCom.Value := IntToStr(j); end;
end; end;
showmessage(MyTV.Columns[0].Caption);//列标题访问
showmessage(MyTV.Columns[0].DataBinding.FieldName);//列字段名访问 MyTV.Columns[0].SortIndex := 0;
MyTV.Columns[0].SortOrder := soAscending; //列升序排序 MyTV.Columns[0].SortIndex := -1;
MyTV.Columns[0].SortOrder := soNone; //取消列排序
MyTV.DataController.Search.Locate(MyTV.GetColumnByFieldName(FieldName).Index, 查找值);// 列值搜索
MyTV.DataController.FocusedRowIndex := MyTV.DataController.FocusedRowIndex - 1;//记录回翻,即Prior;
DBView.DataController.FocusedRowIndex := DBView.DataController.FocusedRowIndex + 1; //记录后翻,即Next;
Aa:=MyTV.datacontroller.values[1,1] ;// 访问第二行第二列的值
MyTV.Columns[0].DataBinding.ValueTypeClass := TcxStringValueType;//设置列字段类型, 其他如整型[TcxIntegerValueType],浮点型[TcxFloatValueType];
//设置列风格:
MyFirstColumnStyle := TcxStyle.Create(Self); MyFirstColumnStyle.Color := clAqua; MyFirstColumnStyle.TextColor := clBlue;
MyTV.Columns[1].Styles.Content := MyFirstColumnStyle;
//设置列下拉框选择列表及类型 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,所以此处让它显示为自己想要的中午显示。
MYTVc1_sex_code.Properties:=B; //此处指明是那个字段。 end;
五、 设置列外观
MyTV.OptionsView.ColumnAutoWidth := true //列自动宽度 MyTV.OptionsView.CellAutoHeight := true //单元自动高度
MyTV.OptionsView.Footer := true //表格合计行显示 MyTV.OptionsView.Header := true // 表格头显示 MyTV.OptionsView.Indicator := true //显示指示条 MyTV.OptionsView.GroupByBox:=true //显示分组框 MyTV.Preview := True //显示预览区
六、 设置表格样式
var MyStyleSheet:TcxGridTableViewStyleSheet;
MyStyle :TcxStyle; begin
MyStyleSheet := TcxGridTableViewStyleSheet.Create(); MyStyle := TcxStyle.Create(self); MyStyle.Color := clBlack; MyStyle.TextColor := clWrite;
MyTV.Styles.Background := MyStyle; //设置背景样式 MyStyleSheet.AddStyles(MyStyle);//分配样式
cxStyleRepository.CreateStyleSheet(MyStyleSheet);
MyTV.Styles.StyleSheet := cxStyleRepository; //分配样式 End;
七、 设置Preview列
前提条件是设置footer=true;
MyTV.Preview.column := MyTVField1;//设置预览列
MyTV.Preview.MaxLineCount := 4;//设置预览列最大显示行数 MyTV.Preview.LeftIndent :=150; //显示左缩进 MyTV.Preview.RightIndent :=150;//显示右缩进
八、 Footer设置
Var ASummary: TcxDataSummary;
MyFooterItems :TcxDataFooterSummaryItems; Acolumn :TcxGridDBColumn;
ASummary := MyTV.DataController.Summary; //提取Footer;
MyFooterItems := ASummary.FooterSummaryItems; //提取FooterItems; //增加FooterItems
With TcxGridDBTaleSummaryItem(MyFooterItems.add) do Begin try Try
Beginupdate;
Column := TcxGridDBColumn(MyTV.VisibleColumns[0]; //Footer显示列位置 AColumn := TcxGridDBColumn(MyTV.VisibleColumns[0]; If assigned(AColumn) then
FieldName := AColumn.dataBinding.FieldName; //Footer计算字段
Kind := TcxSummaryKind(skSum);
//skNone=无.skSum=合计;skMax=取最大值, //skCount=//记录数,skAverage=平均数 Finally
Endupdate; End; Except
Showmessage(‘error’);
MyFooterItems.Items[MyFooterItems.Count-1].Free;//报错释放刚加入的 End; End;
//删除FooterItems
MyFooterItems := TcxGridDBTableSummaryItem(MyFooterItems[0]); If MyFooterItems.FieldByName<>’’ then For i:= 0 to MyTV.VisibleColumnCount -1 do Begin
AColumn := TcxGridDBColumn(MyTV.VisibleColumns[i]);
If AColumn.DataBinding.FieldName = MyFooterItems.FieldName then Break; End;
If Assigned(MyFooterItems.Column) then MyFooterItems.Items[0].Free;
九、 建Band
Var MyBand : TcxGridBand;
MyBandViewInfo: TcxGridbandViewInfo; MyBand := MyTV.Bands.Add; MyBand.Caption : =’新建带’;
MyBandViewInfo:= MyTV.ViewInfo.HeaderViewInfo.BandsViewInfo[MyBand.visibleIndex]; MyTV.Controller.LeftPos := MyBandViewInfo.Bounds.right;
十、 主从表明细嵌套关联设置
MyTV.DetailKeyFieldNames := mastered; //主表关键列 MyTV.KeyFieldNames := ID; //子表对应关键列 MasterKeyFieldNames := ID;//子表自己的关键列 子表ADOQUERY的indexFieldNames := mastered;
十一、组设置
MyTV.DataController.Groups.FullExpand;//组展开 MyTV.DataController.Groups.Collapse;//组收缩
十二、记录操作
MyTV.Datacontroller.Append;//增加记录 MyTV.Datacontroller.Insert;//插入记录
MyTV.Datacontroller.Values[0.1]:=’a’;//单元格赋值 MyTV.Datacontroller.Cancel;//取消修改 MyTV.Datacontroller.Post;//提交保存
MyTV.Datacontroller.DeleteFocused;//删除当前记录
MyTV.Controller.Controller.FocusedRow.IsFirst ;//是否第一行
MyTV.Controller.Controller.FocusedRow.IsLast ;//是否最后行
MyTV.DataController.Options.FocusTopRowAfterSorting :=True;//排序后指向第一行 MyTV.ViewInfo.VisibleRecordCount ;可见行数