cxGrid单元格应用(20100607)

合集下载

CXGRID控件使用说明

CXGRID控件使用说明

CXGRID控件使用说明一、安装CXGRID控件3. 在弹出的对话框中点击"Add"按钮,然后浏览到CXGRID控件的文件夹,选择"dcldxGridLib.dpk"文件,点击"OK"按钮。

4. 在"Installed packages"列表中选中CXGRID控件,点击"Load"按钮。

二、创建CXGRID控件1. 在Delphi中创建一个新的窗体或数据模块。

2.在控件面板中找到CXGRID控件,将其拖放到窗体或数据模块上。

3. 双击CXGRID控件,调出Object Inspector窗口,可以对CXGRID 控件进行属性设置,比如添加数据源、设置列、设计外观等。

三、设置数据源1. 在Object Inspector窗口中找到"DataSource"属性,并将其设置为一个有效的数据源组件,比如TDataSource。

2. 在"Columns"属性中设置数据表格的列和字段对应关系,可以设置列的标题、显示格式、数据类型等属性。

四、绑定数据表格1. 在Object Inspector窗口中找到"Columns"属性,点击右侧的"..."按钮。

2. 在弹出的对话框中点击"Add"按钮,选择需要绑定的字段,点击"OK"按钮。

3.重复上述步骤,为需要绑定的字段添加相应的列。

4. 在"Options"属性中设置表格的显示方式,比如显示水平滚动条、显示垂直滚动条等。

五、增加数据行1.在窗体或数据模块上添加一个按钮控件。

3.在事件代码中使用以下方法向数据表格中增加数据行:MyDataSet.Insert;MyDataSet.FieldByName('字段1').AsString := '值1';MyDataSet.FieldByName('字段2').AsInteger := 值2;MyDataSet.Post;七、删除数据行1.在窗体或数据模块上添加一个按钮控件。

Grid应用

Grid应用

GRID应用一、创建GRID打开数据编辑平台,选择菜单栏“DTM分析”中的“GRID分析”下的“创建GRID”开始创建GRID;出现GRID参数窗口,输入所需创建区域的相应参数;下以丹凤县兰伯特数据为例,在“范围”标签下输入丹凤县行政面的各项参数;设置GRID大小指网格的行列数,这里我们以250*250为例,通过计算可以得出行列数;[行数=(maxy-miny)/250,列数=(maxx-minx)/250],点击“确定”显示“创建成功”即可;选择菜单栏“DTM分析”中的“GRID分析”下的“网格显隐”可以看到网格创建情况;放大窗口可看清网格分布情况二、设置有效区打开菜单栏“DTM分析”下“GRID分析”中的“设置有效区”;在弹出的“设置初始有效值”窗口中设置初始有效值,默认值为“0”;点击“确定”选择所需建立的区域,这里选择丹凤县行政面图层;设置完成即建立了一个空白的GRID;打开菜单栏“DTM分析”下“GRID分析”中的“保存GRID文件”;三、GRID分析在GRID分析中我们利用之前介绍的方法,通过所需分析区域行政面建立两个空白的GRID,称为“基础GRID”和“分析GRID”,这里以地灾分析为例,即建立一个“地灾基础GRID”和“地灾分析GRID”存放在程序配置文件中的Basemap中以便调用;在程序中,地灾因子计算窗口中的“计算综合地灾Grid”即是计算“地灾基础GRID”的值;在该程序中,影响基础地质的因子有易发分区和水系两个,计算基础地质的公式应为“易发分区值*易发分区的影响值+水系值*水系面影响值”,计算出来的值即为综合地质GRID值,将该计算结果插入事先建立的空白的“基础GRID”中,即构建了一个该区域的地灾基础GRID;“分析GRID”的计算公式为“地灾基础GRID值*地质因子影响值+实况雨量*实况雨量影响值+预报雨量*预报雨量影响值”,通过公式将计算出来的值插入“分析GRID”中,即构建了一个地灾分析GRID;在此处,影响地灾预警预报结果的影响因子只有“地质”、“实况雨量”和“预报雨量”,所以三者的影响值相加为1;生成的地灾分析GRID即地灾气象预报的成果,可以得到该区域地质灾害发生的可能性;同理,在计算森林火险GRID时事先根据计算区域行政面建立两个空白GRID,用来存放森林火险基础GRID和森林火险分析GRID;森林火险基础GRID值即此处的综合地质GRID的值,该处影响森林火险的基础因子只有森林分布,所以森林基础因子值等于森林分布数值*森林分布影响值(即1);将该值插入事先建立的空白基础GRID中,作为森林火险基础GRID;影响森林火险的因素为森林分布和气象情况(两者影响值相加为1),所以森林火险分析GRID的值应为“森林火险基础GRID值*森林因子影响值+气象因子*气象因子影响值”;生成的森林火险分析GRID即森林火险预警预报的成果,可以得到该区域森林火险发生的可能性;。

CxGird对单元格的操作

CxGird对单元格的操作

CxGird对单元格的操作【怎么获得CXGrid中指定列和⾏的值】cxGridView.DataController.GetRowValue(cxGridView.DataController.GetRowInfo(x), y);【獲取cxGrid的當前Cell的X,Y座標, 邦定字段, ⾏列】//tv1: TcxGridDBBandedTableView;usescxGridDBTableViewvarACellViewInfo: TcxGridTableDataCellViewInfo;AItem: TcxCustomGridTableItem;iLeft, iTop: Integer;beginAItem := tv1.Controller.FocusedItem;if not SameText(TcxGridDBColumn(AItem).DataBinding.FieldName, 'Price') thenExit;//ACellViewInfo := tv1.Controller.FocusedItem.FocusedCellViewInfo;//當前編輯Cell的X,Y位置iLeft := cxGrid1.Left + ACellViewInfo.EditBounds.Left;iTop := cxGrid1.Top + ACellViewInfo.EditBounds.Top;iTop := iTop + (ACellViewInfo.EditBounds.Bottom - ACellViewInfo.EditBounds.Top); //pnlMyHint.Left := iLeft;pnlMyHint.Top := iTop + 2;//pnlMyHint.Visible := True;//當前Cell的⾏與列edtx.Text := IntToStr(tv1.Controller.FocusedRowIndex);edtY.Text := IntToStr(tv1.Controller.FocusedColumnIndex);end;【取消cxGrid中的交叉⾊】将xxxTableView.Styles.StyleSheet清除即可.【按条件设置⾏的字体、颜⾊ - 1】procedure TfrmPIDaily.cxGrid1DBBandedTableView1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);varcxcolumn: TcxGridDBColumn;iValue: integer;begin//判断列是否存在cxcolumn := (sender as TcxGridDBTableView).GetColumnByFieldName('GroupFooter'); if cxcolumn=nil then exit;//注意:不能直接取邦定DataSet的值,取出来值不对。

cxGrid的使用方法

cxGrid的使用方法

cxGrid的使用方法cxGrid功能强大,适合做企业级的复杂查询。

非常方便。

但是对其用法介绍的并不多,在此总结他人的使用经验和自己的一点小经验,供大家参考。

(1)动态设置显示格式procedure SetDisplayFormat(ACtrlData: TClientDataSet;TbView: TcxGridDBTableView);vari: integer;beginif ACtrlData.RecordCount <= 0 then Exit;tryTbView.ClearItems;ACtrlData.First;for i := 0 to ACtrlData.RecordCount - 1 dobeginif ACtrlData.FieldByName('SQBF_DisplayInGrid').AsString = '1' then //在表格中显示with TbView.CreateColumn dobeginDataBinding.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;excepton E: Exception doSaveLog('设置显示格式时出错:' + E.Message);end;end;(2)显示行号procedure TFmQueryBase.cxDBViewMasterCustomDrawIndicatorCell(Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);varFValue: string;FBounds: TRect;beginFBounds := AViewInfo.Bounds;if (AViewInfo is TcxGridIndicatorRowItemViewInfo) thenbeginACanvas.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 不方便,我还没有找到好方法。

CxGrid 使用手册

CxGrid 使用手册
TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 44); //添加图标图像
FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; //指定图标序号
:= 'miCollapseAllGroup';
FMenuItem.Caption := '收缩所有组(&O)';
FMenuItem.OnClick := miCollapseAllGroupClick;
FSubMenuItem.Caption := '从不显示(&N)';
FSubMenuItem.RadioItem := True;
FSubMenuItem.GroupIndex := 5;
FSubMenuItem.OnClick := miFilterPanelClick;
//导出
FMenuItem := TMenuItem.Create(Self);
:= 'miExport';
TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 37);
FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1;
FMenuItem.Caption := '导出(&E)';
FMenuItem.OnClick := Self.miExportClick;
//总是显示
FSubMenuItem := TMenuItem.Create(Self);

cxGrid技巧汇总

cxGrid技巧汇总

cxGrid技巧汇总2009-04-01 12:48==========================================================================在主从TableView中根据主TableView得到对应的从TableViewvarADetailDC: TcxGridDataController;AView: TcxCustomGridTableView;beginwith cxGrid1DBTableView1.DataController doADetailDC := TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)); AView := ADetailDC.GridView;end;==============================================================================定位在第一行并显示内置编辑器cxDBVerticalGrid1.FocusedRow := cxDBVerticalGrid1.Rows[0];cxDBVerticalGrid1.ShowEdit;==============================================================================隐藏 "<No data to display>" 字符串该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空来隐藏该文本。

uses cxClasses, cxGridStrs;...cxSetResourceString(@scxGridNoDataInfoText, '');//如果"<No data to display>" 字符串已经显示,需要调用:<View>.LayoutChanged;============================================================删除应用过滤后的行varI: Integer;beginwith <GridView> dofor I := 0 to ViewData.RecordCount - 1 dobeginViewData.Records[0].Focused := True;DataController.DataSet.Delete;end;=============================================================根据单元的值设置样式procedure <aForm>.<aColumn>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);beginif ARecord.Values[AItem.Index] = aSomeValue thenAStyle := <aSomeStyle>;end;procedure <aForm>.<aView>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);varAColumn: TcxCustomGridTableItem;beginAColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Email');if VarToStr(ARecord.Values[AColumn.Index]) = '' thenAStyle := cxStyleNullEmail;end;==============================================================================TcxCustomGridTableView.FindItemByName, TcxGridDBTableView.GetColumnByFieldName or TcxGridDBDataController.GetItemByFieldNamewith cxGrid1DBBandedTableView1.DataController doAValue := Values[FocusedRecordIndex, GetItemByFieldName('SomeFieldName').Index]; ===================================================================动态生成BandedViewvarAView: TcxCustomGridView;beginAView := <cxGrid>.CreateView(TcxGridDBBandedTableView); TcxGridDBBandedTableView(AView).DataController.DataSource := <DataSource>; TcxGridDBBandedTableView(AView).Bands.Add;with TcxGridDBBandedTableView(AView).Bands.Add dobeginVisible := False;FixedKind := fkLeft;end;TcxGridDBBandedTableView(AView).DataController.CreateAllItems;<cxGridLevel>.GridView := AView;======================================================================当底层数据集为空时显示一条空记录procedure <Form>.<cxGrid>Enter(Sender: TObject);varView: TcxGridDBTableView;beginView := TcxGridDBTableView((Sender as TcxGrid).FocusedView);if View.DataController.DataSet.IsEmpty thenbeginView.DataController.DataSet.Append;View.Controller.EditingController.ShowEdit;end;end;=======================================================================在当前View插入记录使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data Controller,之后使用Data Controller的方法来操作数据:- Append- Insert- Post- Cancel- DeleteFocused- DeleteSelection示例:varARecIndex: Integer;…View.DataController.Append;ARecIndex := View.DataController.FocusedRecordIndex;View.DataController.Values[ARecIndex, SomeItemIndex] := SomeValue;View.DataController.Post;另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的方法来操作数据。

CXGRID控件使用说明

CXGRID控件使用说明

TCXGRID控件:属性:ActiveLevel: 当前层BorderStyle: 窗口风格Color: 颜色FocusedView: 当前View;Font: 字体LevelTabs: 类似PageControls头设置CaptionAlgnment:标题对齐方式Images:图标Style:风格Levels:RootLevelOptions:层选项DetailTabsPosition: 类似PageControls头显示位置;TabsForEmptyDetails: 如果数据为空是否显示Tabs TcxGridLevel组件:属性:Active: 读写激活该层;Controls: 读写指向TCXGrid;CanBeVisible: 读取是否能设置可见;Count: 读取子层个数;Displaycaption: 读取层标题;IsMaster: 读取是否cxgrid的最上层;Items: 读取层组,例: Items[0]访问第一个层;Level: 读取层级数;VisibleCount: 读取可见层个数VisibleIndex: 读取可见索引个数VisibleItems: 读取可见层组,例:VisibleItems[0]访问第一个可见层Caption: 读写层标题;GridView: 指定或读取该层的Grid显示;ImageIndex: 读写图标索引Options: TcxGridLevelOptions选项DetailFrameColor: 读或写明细表格颜色DetailFramWidth: 读或写明细表格DetailTabsPosition: 读或写Tab位置,类似PageControlsTabs Styles: 样式Tab: 读或设置tab样式tabsBackground: 读或设置tab背景样式Visible: 读或设置是否可见方法:Add: 增加一个Level;Levels[i].Add:增加一个子Level; TcxGridDBBandedTableView组件:属性:BackGroundBitmaps:背景图片选项Background:背景图Bandbackground:带背景图Bankheader:带头背景Content:细节区背景filterBox:过滤区背景footer:注脚背景group: 组背景header:列头背景preview:预览区背景Bands:带列表DataController: 数据控制DataSource:数据源DetailKeyFieldNames:主从表时设置细表键字段名KeyFieldNames: 主从表时设置关键字段名MasterKeyFieldNames:主从表时设置主表键字段名Summary:合计组FooterSummaryItems:注脚定义FooterSummaryItems:组脚定义FilterBox:过滤框CustomizeDialog:是否自定义过滤条件Position:过滤框显示位置Visible:显示过滤框NavigatorButtons:导航条设置Append:增加按钮设置Enabled:是否禁用该按钮Visible:是否显示该按钮ImageIndex:图标IDCancel:取消按钮设置,具体设置同Append;ConfirmDelete:删除时是否确认提示Delete: 具体设置同Append;Edit: 具体设置同Append;First: 具体设置同Append;Insert: 具体设置同Append;Last: 具体设置同Append;Next: 具体设置同Append;Filter: 具体设置同Append;GotoBookmark: 具体设置同Append;NextPage: 具体设置同Append;Post: 具体设置同Append;Prior: 具体设置同Append;PriorPage: 具体设置同Append;Refresh: 具体设置同Append;SaveBookmark: 具体设置同Append;OptionsBehavior:行为选项AlwaysShowEditor:是否总是显示编辑条BandHeaderHints:带头是否显示提示CellHints:单元格是否显示提示ColumnHeaderHints:列头是否显示提示CopyCaptionsToClipboard:是否允许复制标题到剪贴板CopyPreviewToClipboard:是否允许复制预览内容到剪贴板ExpandMasterRowOnDblClik:是否允许双击行显示明细FocusFirstCellOnNewRecord:新增记录时是否焦点指向第一列单元格GoToNextCellOnEnter:按回车是否自动跳到下一单元格NavigatorHints:是否显示导航条提示OptionsCustomize:自定义选项BandHiding:是否显示带BandMoving:是否允许拖动带ColumnFiltering:是否允许列过滤ColumnGrouping:是否允许列分组ColumnHiding:列头是否隐藏ColumnHorzSizing:是否允许调整列宽度ColumnMoving:是否允许列拖动ColumnSorting:是否允许列排序ColumnVertSizing:是否允许调整列高度DataRowSizing:是否允许调整数据行高度GroupBySorting:是否允许组排序GroupRowSizing:是否允许调整组行高度OptionData: 允许数据操作Appending: 是否允许增加CancelOnExit: 退出时是否自动取消修改Deleting: 是否允许删除DeletingConfirmation: 删除是否提示Editing :是否允许编辑Inserting: 是否允许插入OptionsSelection: 单元格操作CellMultiSelect:是否允许选择多单元格CellSelect: 进入单元格是否选择InvertSelect: 是否允许转换选择MultiSelect: 是否允许多行选择HideFocusRectOnExit: 移开是否隐藏焦点UnselectFocusedRecordOnExit:移开是否允许取消焦点OptionsView:表格选项BandCaptionsInColumnAlternateCaption:是否允许在列里修改带标题BandHeaderHeight: 带头高度BandHeaderLineCount: 带头显示行数BandHeaders: 是否显示带头CellAutoHeight:单元格是否自动高度CellTextMaxLineCount: 单元格文本最大行数ColumnAutoWidth: 列是否自动宽度DataRowHeight: 数据行高度Footer:是否允许显示注脚FooterAutoHeight: 注脚是否自动适应高度FooterMultiSummaries:是否允许多注脚GridLineColor:表格行线颜色GridLines:显示表格行线类型GroupByBox:是否允许拖动列到分组区进行分组GroupFooters:显示组脚类型Header:是否显示列头HeaderAutoHeight:列头是否自动适应高度HeaderHeight: 列头高度IndicatorWidth:是否显示左边指示条IndicatorWidth: 指示条宽度Navigator: 是否显示导航条NavigatorOffSet: 导航条偏移位置ShowColumnFilterButtons: 是否显示列过滤按钮ShowEditButtons: 是否显示编辑按钮Preview:预览选项AutoHeight:是否自动适应高度Column:要预览的列,只能选一列LeftIndent: 左缩进点数MaxLineCount:最大显示行数RightIndent:右缩进点数Visible: 预览是否可见PopupMenu:弹出菜单Styles:样式或风格组BackGround:背景风格Content:明细风格Footer:注脚风格Group:组风格GroupSummary:组合计区风格Header:头风格Indicator:指示区风格Preview:预览区风格Selection:选择区风格StyleSheet:风格组,选中后自动设置各区风格方法或函数:CreateColumn:参数:无;功能:新建一列;返回:返回列类型结果;GetColumnByFieldName:参数:字段名串;功能:取得指定字段列;返回:返回列类型结果;例:MyTV.GetColumnByFieldName('First').Visible := False;CleaarItems:参数:无;功能:清除全部显示列;返回:无CreateItem:参数:无;功能:建一显示列;返回:列类型值StoreToIniFile:导出布局到Ini文件StoreToRegistry:导出布局到注册表StoreToStream:导出布局到流体RestoreFromIniFile: 从Ini文件恢复布局RestoreFromRegistry:从注册表恢复布局RestoreFromStream:从流体恢复布局FindItemByID:根据ID号查找列FindItemByName:根据列名查找列FindItemByTag:根据Tag查找列IndexofItem:返回列的序号CreateViewInfo:建表格TCXGRID用法指南假设已设定以下变量MycxGrid: TcxGrid;MycxGridLevel: TcxGridLevel;MyTV: TcxGridDBTableView;MyDataSource: TDataSource;方法:一、建层和层视图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; //建全部显示字段四、动态增加显示列及列访问variIndex: integer;vCol: TcxGridDBColumn;vImgCom: TcxImageComboBoxItem;i,j: integer;for i:= 0 to Mydatasource.dataset.FieldCount -1 dobeginvCol := MyTV.CreateColumn;vCol.DataBinding.FieldName:=Mydatasource.dataset.Fields[i].FieldName;if (i = 1) thenbeginvCol.PropertiesClassName := 'TcxImageComboBoxProperties'; ////分区分大小写vCol.DataBinding.ValueType := 'String';for j := 0 to 5 dobeginvImgCom:=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;//设置列下拉框选择列表及类型varA:TDataSource:B:TcxlookupcomboboxProperties;beginA:=TDataSource.create(self);B:=tcxlookupcomboboxproperties.create(self);A.Dataset:=Dic_ry_xb;//此处指定数据源。

delphi控件cxGrid用法大全(1)

delphi控件cxGrid用法大全(1)
加一个Summary项,Column设为Grid的第一列,Kind设为skNone? 在该Summary项的OnGetText事件中,输入:?
procedure(?
Sen der: TcxDataSummaryltem; const AValue: Varia nt; AIsFooter: Boolea n;?
procedure In itRecord(c onst Str: stri ng);
var
J: In teger;
V: Varia nt;
begi n
:=Str;
for J := 0 to - 1 do
if [J] <> '-' then
begi n
V := [J];
if n ot VarIsNull(V) the n
Ini tRecord(Stri ngs[I+AHeaderLi neCou nt]);
fin ally end;
end;
procedure (Se nder: TObject);
begi n
CustomizeColum ns;
LoadData_Zcfz; end;
****************************************************************************
procedure (Se nder: TObject);
begi n
如何从外边的TXT文件导入到cxGrid
解决:
procedure CustomizeColum ns;
procedure LoadData;
procedure ;
con st

CXGRID控件使用说明

CXGRID控件使用说明

CXGRID控件使用说明
1.控件的安装和基本设置
在Delphi中使用CXGRID控件,首先需要将其安装到开发环境中。


装过程通常是通过将相关的文件复制到Delphi的安装目录下,并在
Delphi中添加相应的选项来完成的。

安装完成后,在Delphi的工具箱中可以看到CXGRID控件的图标。


它拖放到窗体上,就可以开始使用CXGRID控件了。

然后,可以根据需求
对CXGRID进行一些基本的设置,比如设置控件的大小、位置、标题等。

2.数据绑定和显示
在设置完数据集的源之后,可以在代码中通过调用CXGRID控件的Refresh方法来刷新数据的显示。

刷新之后,CXGRID控件会自动根据数据
集的内容生成相应的表格,并显示出来。

4.过滤和排序
对于排序,可以通过调用CXGRID控件的Sort方法来对数据进行排序。

可以根据单个字段或多个字段进行排序,还可以指定升序或降序。

5.事件的处理
6.高级功能
除了上述基本功能外,CXGRID控件还提供了一些高级功能,以满足
更复杂的需求。

比如,可以通过合并单元格来显示一些特殊的信息;可以
使用分组和汇总功能来对数据进行分析和统计;可以使用主从表格来实现
多层次的数据管理等。

总结:
以上就是CXGRID控件的使用说明。

通过CXGRID控件的灵活设置和丰富功能,开发者可以快速构建出功能强大且易于使用的数据管理界面。

希望本文对你使用CXGRID控件有所帮助。

CXGRID用法(取行、列值,定位选中某行等等)

CXGRID用法(取行、列值,定位选中某行等等)

CXGRID用法(取行、列值,定位选中某行等等)CXGRID用法(取行、列值;定位选中某行等等)Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号cxGrid1DBTableView1.Controller.FocusedRow 当前行cxGrid1DBTableView1.Controller.FocusedColumn 当前列cxGrid1DBTableView1.Controller.FocusedColumnIndex 当前列号cxGrid1DBTableView1.Controller.EditingItem 当前编辑中的单元框cxGrid1DBTableView1.Controller.EditingController.Edit 当前的编辑框在编辑状态下可以这样取当前单元格的值:if cxGrid1DBTableView1.Controller.FocusedColumn.Editing thenShowMessage(cxGrid1DBTableView1.Controller.EditingContr oller.Edit.EditingValue)elsecxGrid1DBTableView1.DataController.GetValue(cxGrid1DBTa bleView1.DataController.FocusedRecordIndex,cxGrid1DBTableView1.Controller.FocusedItemIndex);非编辑状态下可以这样取得单元格内的值:OnCellClick事件代码:procedure TForm1.cxGrid1DBTableView1CellClick(Sender: TcxCustomGridTableView;ACellViewInfo: TcxGridTableDataCellViewInfo; AB utton: TMouseButton;AShift: TShiftState; var AHandled: Boolean);varv : Variant;beginv := ACellViewInfo.Value;end;取列值i := cxGrid1DBBandedTableView1.Controller.FocusedC olumn.Index;cxGrid1DBBandedTableView1.DataController.GetValue(cxGri d1DBBandedTableView1.Controller.SelectedRows[0].RecordIn dex,i);cxGrid1DBTableView1.DataController.Values[行,列]取得焦点cxGrid1DBTableView1.Columns[5].FocusWithSelection;cxGrid1DBTableView1.Columns[4].Focused:=True;得到当前点击的单元格的值uses Clipbrd;OnCellClick事件代码:procedure TForm1.cxGrid1DBTableView1CellClick(Sender: TcxCustomGridTableView;ACellViewInfo: T cxGridTableDataCellViewInfo; AButton: TMouseB utton;AShift: TShiftState; var AHandled: Boolean);varv : Variant;beginv := ACellViewInfo.Value;//值Clipboard.AsT ext := vartostr(v);//保存到clipboardend;cxGrid的DBTableView的名称为dgtv11. 返回选中的行数gdtv1.DataController.GetSelectedCount;2. 返回选中行的索引: gdtv1.DataController.GetSelectedRowIndex(0) , 表示第一个选中行的索引3. 返回选中行的数据;varI, J:Integer;beginfor I:=0 to gdtv1.DataController.GetSelectedCount - 1 do beginJ := gdtv1.DataController.GetSelectedRowIndex(I);ShowMessage(VarToStr(gdtv1.DataController.GetValue(J, 0))); //选择中行的第列的值end;end;4. 获取cxGrid排序规则constOrderArray: array[soNone..soDescending] of string = ('None', 'ASC', 'DESC');varI: integer;S, OrderStr: string;beginfor I := 0 to gdtv1.SortedItemCount - 1 do beginif S <> '' thenS := S + ', ';OrderStr := OrderStr + gdtv1.SortedItem s[I].DataBinding.DefaultCaption + ' ';OrderStr := OrderStr + OrderArray[TcxDataSortOrder(gdtv1.SortedItem s[I].SortOrder)];S := S + OrderStr;end;ShowMessage('ORDER BY ' + S);5.获取多选的值for i := 0 to cxgrid1.SelectedRows.Count-1 dobegincxgrid1.DataSource.DataSet.GotoBookmark(Pointer(cxgrid1. SelectedRows.Items[i])); //定位选中的字段end;6.//选择行的第1列的值for I:=0 to cxGrid1DBTableView1.DataController.GetSelectedCount - 1 do beginJ := cxGrid1DBTableView1.DataController.GetSelectedRowIndex(I);ShowMessage(VarToStr(cxGrid1DBTableView1.DataControlle r.GetValue(J, 0)));end;7.获取所选行的值with cxGrid1DBTableView1.Controller dobeginfor i:=0 to SelectedRowCount-1 dobeginSelectedRows[i].Focused:=True;ShowMessage(ADOQuery1.fieldbyname('mc').AsString);end;end;。

delphi中cxGrid使用汇总(二)(转)

delphi中cxGrid使用汇总(二)(转)

delphi中cxGrid使用汇总(二)(转)delphi中cxGrid使用汇总(二)(转)2011-12-27 22:05:14| 分类: delphi |字号订阅50 保存/恢复带汇总行的布局<TableView>.StoreToIniFile('c:\Grid.ini', True, [gsoUseSummary]);<GridView>.RestoreFromIniFile(<inifilename>,True,False {or True, optional},[gsoUseSummary]);*************************************************************** *************51 取消过滤时移到第一行解决:usescxCustomData;procedure TYour_Form.AViewDataControllerFilterChanged( Sender: TObject);varFilter: TcxDataFilterCriteria;beginwith Sender as TcxDataFilterCriteria doif IsEmpty thenDataController.FocusedRowIndex := 0;end;*************************************************************** *************52 排序后移到第一行解决:可以设置DataController.Options.FocusTopRowAfterSorting := True,也可以使用如下的代码:usescxCustomData;procedure TYour_Form.Your_ViewDataControllerSortingCh anged(Sender: TObject);beginTcxCustomDataController(Sender).FocusedRowIndex := 0;end;*************************************************************** *************53 判断当前行是否第一行或最后一行解决:可以使用DataController的IsBOF, IsEOF方法,或者:<AView>.Controller.Controller.FocusedRow.IsFirst<AView>.Controller.Controller.FocusedRow.IsLast*************************************************************** *************54 根据指定值查找记录解决:DataController提供了好几个方法来得到指定值对应的RecordIndex对于Bound View可以使用FindRecordIndexByKeyValue方法*************************************************************** *************55 编辑和显示Blob字段解决:该字段的Properties设置为BlobEdit,并将BlobPaintStyle 属性设为 bpsText*************************************************************** *************56 得到可见行数解决:<View>.ViewInfo.VisibleRecordCount*************************************************************** *************57 保存后的行设置为当前行解决:constCM_SETFOCUSEDRECORD = WM_USER + 1002;typeTForm1 = class(TForm)cxGrid1DBTableView1: TcxGridDBTableView;cxGrid1Level1: TcxGridLevel;cxGrid1: TcxGrid;dxMemData1: TdxMemData;dxMemData1Field1: TStringField;dxMemData1Field2: TIntegerField;DataSource1: TDataSource;cxGrid1DBTableView1RecId: TcxGridDBColumn;cxGrid1DBTableView1Field1: TcxGridDBColumn;cxGrid1DBTableView1Field2: TcxGridDBColumn;Timer1: TTimer;CheckBox1: TCheckBox;procedure Timer1Timer(Sender: TObject);procedure dxMemData1AfterPost(DataSet: TDataSet);procedure CheckBox1Click(Sender: TObject);privateprocedure CMSetFocusedRecord(var Msg: TMessage); message CM_SETFOCUSEDRECORD;public{ Public declarations }end;varForm1: TForm1;FocusedIdx: Integer;implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);begindxMemData1.AppendRecord(['', IntToStr(Random(1000)), Random(1000)]);end;procedure TForm1.dxMemData1AfterPost(DataSet: TData Set);beginPostMessage(Handle,CM_SETFOCUSEDRECORD, Integer(cxGrid1DBTableView1), Ma keLParam(cxGrid1DBTableView1.Controller.FocusedRowIndex, cxGrid1DBTableView1.Controller.TopRowIndex));end;procedure TForm1.CMSetFocusedRecord(var Msg: TMes sage);beginTcxGridDBTableView(msg.WParam).Controller.FocusedRowIn dex := Msg.LParamLo;TcxGridDBTableView(msg.WParam).Controller.TopRowIndex := Msg.LParamHi;end;procedure TForm1.CheckBox1Click(Sender: TObject);beginTimer1.Enabled := TCheckBox(Sender).Checked;end;end.*************************************************************** *************58 删除记录并获得焦点解决:procedure TForm1.BtnDeleteClick(Sender: TObject);varFocusedRow, TopRow: Integer;View: TcxGridTableView;DataController: TcxGridDataController;beginView := cxGrid1.FocusedView as TcxGridTableView;DataController := View.DataController;// Remember the top row (the vertical scrollbar p osition)TopRow := View.Controller.TopRowIndex;// Remember the focused row(!) indexFocusedRow := DataController.FocusedRowIndex;DataController.DeleteFocused;// After deletion the same row must be focused, // although it will correspond to a different data recordDataController.FocusedRowIndex := FocusedRow;// Restore the top rowView.Controller.TopRowIndex := TopRow;end;*************************************************************** *************59 cxGrid的 TableView 数据排序与对应的数据集同步解决:COPYRIGHT BY cnCharles, ALL RIGHTS RESERVED.delphi群: 16497064, blog: /cnCharles //描述: cxGrid的 TableView 数据排序与对应的数据集同步, 该方法主要用于打印时// 的排序与所见到的排序保持一致;//参数: @tv: 排序的cxGridTableView//说明: @tv: 对应的数据集只支持 ADOQuery与 ClientDataSet;procedure cxGridSortSyncToDataSet(tv: TcxGridDBTableView); overload;//描述: 功能同上, 实现代码一样, 如果有更改就同步更改procedure cxGridSortSyncToDataSet(tv: TcxGridDBBandedT ableView); overload;procedure cxGridSortSyncToDataSet(tv: TcxGridDBTableView);constSortArray: array[soAscending..soDescending] of string = (’ASC’, ’DESC’);varAscFields, DescFields, S, SortOrder: string;IndexPrint: string;I: integer;Index: integer;cds: TClientDataSet;beginS := ’’;AscFields := ’’;DescFields := ’’;if tv.SortedItemCount = 0 thenExit;if tv.DataController.DataSource.DataSet is TADOQuery then beginfor I := 0 to tv.SortedItemCount - 1 do beginSortOrder := SortArray[tv.SortedItems[I].SortOrder];if S <> ’’ thenS := S + ’, ’;Index := tv.SortedItems[I].Index;S := S + tv.Columns[Index].DataBinding.Field.FieldName + ’ ’ + SortOrder;end;(tv.DataController.DataSource.DataSet asTADOQuery).Sort := S;end else if (tv.DataController.DataSource.DataSet is TClientDataSet) then beginCds := tv.DataController.DataSource.DataSet as TClientDataSet;for I := 0 to tv.SortedItemCount - 1 do beginIndex := tv.SortedItems[I].Index;S := tv.Columns[Index].DataBinding.Field.FieldName +’;’;AscFields := AscFields + S;if tv.SortedItems[I].SortOrder = soDescending thenDescFields := DescFields + S;end;if AscFields <> ’’ thenDelete(AscFields, Length(AscFields), 1); //删除 ;if DescFields <> ’’ thenDelete(DescFields, Length(DescFields), 1);IndexPrint := TimeToStr(Now());Cds.IndexDefs.Clear;IndexPrint := TimeToStr(Now());cds.AddIndex(IndexPrint, AscFields, [], DescFields);cds.IndexName := IndexPrint;end;end;*************************************************************** *************60 cxGRID怎么遍历已经选择的单元格解决:n := cxGrid1DBTableView1.DataController.GetSelectedCount;for i:=0 to n - 1 dobeginIndex := cxGrid1DBTableView1.DataController.GetSelecte dRowIndex(i);if Index < 0 then continue;AccID :=cxGrid1DBTableView1.DataController.GetRowvalue(cxGrid1DBTableView1.DataController.GetRowInfo(Index),0);AccID := dsData.DataSet.FieldByName(’AccountID’).As String;end;n := cxGrid1DBTableView1.DataController.GetSelectedCount;for i:=0 to n - 1 dobeginIndex := cxGrid1DBTableView1.DataController.GetSelecte dRowIndex(i);if Index < 0 then continue;AccID := cxGrid1DBTableView1.DataController.GetRowvalue(cxGrid1DBTableView1.DataController.GetRowInfo(Index),0);//这里的0是列的索引,能指定,也可用通过GridView获取end;*************************************************************** *************61 动态设置显示格式解决:procedure SetDisplayFormat(ACtrlData: TClientDataSet;TbView: TcxGridDBTableView);vari: integer;beginif ACtrlData.RecordCount <= 0 then Exit;tryTbView.ClearItems;ACtrlData.First;for i := 0 to ACtrlData.RecordCount - 1 dobeginif ACtrlData.FieldByName('SQBF_DisplayInGrid').AsString = '1' then //在表格中显示with TbView.CreateColumn dobeginDataBinding.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;excepton E: Exception doSaveLog('设置显示格式时出错:' + E.Message);end;end;*************************************************************** *************62 给cxGRID加序号列解决:procedure SetRowNumber(var ASender: TcxGridTableView;AViewInfo: TcxCustomGridIndicatorItemViewInfo;var ACanvas: TcxCanvas; var ADone: boolean);uses cxLookAndFeelPainters;procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo;var ACanvas: TcxCanvas; var ADone: boolean);varAIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo;ATextRect: TRect;AFont: TFont;AFontTextColor, AColor: TColor;beginAFont := ACanvas.Font;AColor := clBtnFace;AFontTextColor := clWindowText ;if (AViewInfo is TcxGridIndicatorHeaderItemViewInfo) then beginATextRect := AViewInfo.Bounds;InflateRect(AT extRect, -1, -1);ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.Bounds,ATextRect, [], cxBordersAll, cxbsNormal, taCenter, vaCenter, False, False, '序号', AFont, AFontTextColor, AColor);ADone := True;end ;if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then Exit;ATextRect := AViewInfo.ContentBounds;AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo;InflateRect(AT extRect, -1, -1);ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds,ATextRect, [], [bBottom, bLeft, bRight], cxbsNormal, taCenter, vaCenter,False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1),AFont, AFontTextColor, AColor);ADone := True;ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas, ATextRect, AIndicatorViewInfo.IndicatorKind);end;如果你不要行标志的话,你可以不改控件直接注释掉这一行: ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas, ATextRect, AIndicatorViewInfo.IndicatorKind);要标志的话,在DrawIndicatorImage 从这里跟进去(Ctrl+左键单击)在 cxLookAndFeelPainters 单元中作如下修改:class procedure TcxCustomLookAndFeelPainter.DrawIndicatorImage(ACanvas: TcxCanvas;const R: TRect; AKind: TcxIndicatorKind);varX, Y: Integer;beginif AKind = ikNone then Exit;with cxIndicatorImages, R dobeginX := (Left + Right - Width); //靠右Y := (Top + Bottom - Height) div 2; //居中end;cxIndicatorImages.Draw(ACanvas.Canvas, X, Y, Ord(AKind) - 1);end;注意,我已注明靠右的那一行, 就是去掉 DIV 2 了,还要改一个地方:SKIN控件目录下的dxSkinLookAndFeelPainter单元,找到TdxSkinLookAndFeelPainter.DrawIndicatorImage 函数的OffsetRect(ARect, (Left + Right - cx div 2) , (Top + Bottom - cy) div 2);这一行,将 (Left + Right - cx div 2) 改为(Left + Right - cx) 也是去掉 div 2 就是靠右;修改后: OffsetRect(ARect, (Left + Right - cx) , (Top + Bottom - cy) div 2);使用procedureTForm1.cxGrid1DBTableView1CustomDrawIndicatorCell( Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: T cxCustomGridIndicatorItemViewInfo; var ADone: Boolean);beginSetRowNumber(Sender,AviewInfo,ACanvas,ADone);end;另外序号列的列宽最好改为25以上!效果图:*************************************************************** *************63 cxGrid自带过滤后数据也数据集同步解决:在cxGrid的View Filter事件的OnBeforeChange中写代码就可以了.procedurecxgd1DBTableView1DataControllerFilterBeforeChange ( Sender: T cxDBDataFilterCriteria; ADataSet: TDataSet; const AFilterT ext: String); begin //这里可以增加数据集控件的filter:=false; //如:adoquery.filter:=false; //如果使用的是cxgrid的汉化版本,可以将AFilterText中的中文等于,小于替换成= <等//adoquery.filter:=替换了中文的AFilterText; ShowMessage(AFilterText); end; 写了上述步骤后可以在tvcxgd1DBTableView1DataControllerFilterChanged写adoquery.filter:=true; 这样就起到了cxgrid过滤后的数据同步到adoquery。

cxgrid 应用

cxgrid 应用
序号绑定字段mycount5cxgrid增加一栏显示checkbox方法在dataset里边增加myselect字段类型为booleancxgrid增加显示字段选择select设定select字段的propertiesfalse
CXGRID 颜色设置
DELPHI 技术 2010-09-05 20:03:54 阅读 83 评论 0 1、隔行显示 procedure TForm1.cxGrid1DBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if AViewInfo.GridRecord.Values[0] mod 2 = 0 then ACanvas.Canvas.brush.color := clred; end; 2、根据条件设置行颜色 procedure TFrmSalesHis.View1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: begin if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('isgd').Index] = true then begin ACanvas.Canvas.Brush.Color := clred; ACanvas.canvas.Font.Color := clblack; end; end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////// var AYellowStyle: TcxStyle; TcxGridTableDataCellViewInfo; var ADone: Boolean); 字号:大中小 订阅

cxGrid技巧汇总

cxGrid技巧汇总

cxGrid技巧汇总2009-04-01 12:48==========================================================================在主从TableView中根据主TableView得到对应的从TableViewvarADetailDC: TcxGridDataController;AView: TcxCustomGridTableView;beginwith cxGrid1DBTableView1.DataController doADetailDC := TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)); AView := ADetailDC.GridView;end;==============================================================================定位在第一行并显示内置编辑器cxDBVerticalGrid1.FocusedRow := cxDBVerticalGrid1.Rows[0];cxDBVerticalGrid1.ShowEdit;==============================================================================隐藏 "<No data to display>" 字符串该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空来隐藏该文本。

uses cxClasses, cxGridStrs;...cxSetResourceString(@scxGridNoDataInfoText, '');//如果"<No data to display>" 字符串已经显示,需要调用:<View>.LayoutChanged;============================================================删除应用过滤后的行varI: Integer;beginwith <GridView> dofor I := 0 to ViewData.RecordCount - 1 dobeginViewData.Records[0].Focused := True;DataController.DataSet.Delete;end;=============================================================根据单元的值设置样式procedure <aForm>.<aColumn>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);beginif ARecord.Values[AItem.Index] = aSomeValue thenAStyle := <aSomeStyle>;end;procedure <aForm>.<aView>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);varAColumn: TcxCustomGridTableItem;beginAColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Email');if VarToStr(ARecord.Values[AColumn.Index]) = '' thenAStyle := cxStyleNullEmail;end;==============================================================================TcxCustomGridTableView.FindItemByName, TcxGridDBTableView.GetColumnByFieldName or TcxGridDBDataController.GetItemByFieldNamewith cxGrid1DBBandedTableView1.DataController doAValue := Values[FocusedRecordIndex, GetItemByFieldName('SomeFieldName').Index]; ===================================================================动态生成BandedViewvarAView: TcxCustomGridView;beginAView := <cxGrid>.CreateView(TcxGridDBBandedTableView); TcxGridDBBandedTableView(AView).DataController.DataSource := <DataSource>; TcxGridDBBandedTableView(AView).Bands.Add;with TcxGridDBBandedTableView(AView).Bands.Add dobeginVisible := False;FixedKind := fkLeft;end;TcxGridDBBandedTableView(AView).DataController.CreateAllItems;<cxGridLevel>.GridView := AView;======================================================================当底层数据集为空时显示一条空记录procedure <Form>.<cxGrid>Enter(Sender: TObject);varView: TcxGridDBTableView;beginView := TcxGridDBTableView((Sender as TcxGrid).FocusedView);if View.DataController.DataSet.IsEmpty thenbeginView.DataController.DataSet.Append;View.Controller.EditingController.ShowEdit;end;end;=======================================================================在当前View插入记录使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data Controller,之后使用Data Controller的方法来操作数据:- Append- Insert- Post- Cancel- DeleteFocused- DeleteSelection示例:varARecIndex: Integer;…View.DataController.Append;ARecIndex := View.DataController.FocusedRecordIndex;View.DataController.Values[ARecIndex, SomeItemIndex] := SomeValue;View.DataController.Post;另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的方法来操作数据。

在cxgrid中如何实现输入单价列和数量列数值,金额自动算出并显示在金额列里

在cxgrid中如何实现输入单价列和数量列数值,金额自动算出并显示在金额列里

关注CSDN 论坛微博 送CSDN 积分⼤礼包对我有⽤[0] 丢个板砖[0] 引⽤ | 举报 | 管理2013年度CSDN 博客之星评选活动对我有⽤[0] 丢个板砖[0] 引⽤ | 举报 | 管理⽂思海辉第⼀届在线编程⼤赛对我有⽤[0] 丢个板砖[0] 引⽤ | 举报 | 管理在cxgrid 中如何实现输⼊单价列和数量列数值,⾦额⾃动算出并显⽰在⾦额列⾥//⾸先将cxGrid1DBTableView1Column1.Properties 和cxGrid1DBTableView1Column2.Properties 的属性设置为SpinEdit ,然后,在他们的PropertiesChange 事件调⽤下列过程:gzzai⼴州佬等级:#2 得分:0回复于: 2012-07-13 13:09:40cxGrid1DBTableView1.Columns[1].EditValue+cxGrid1DBTableView1.Columns[2].EditValue;应为cxGrid1DBTableView1.Columns[1].EditValue * cxGrid1DBTableView1.Columns[2].EditValue;gzzai⼴州佬等级:#3 得分:0回复于: 2012-07-13 13:14:27严谨些就这样:Meng_hualiMeng_huali等级:#4 得分:0回复于: 2012-07-13 17:07:10引⽤ 2 楼 的回复:cxGrid1DBTableView1.Columns[1].EditValue+cxGrid1DBTableView1.Columns[2].EditValue;应为cxGrid1DBTableView1.Columns[1].EditValue * cxGrid1DBTableView1.Columns[2].EditValue;这⾥的Columns[1]Columns[2]可以换成cxGrid1DBTableView1.GetColumnByFieldName('列绑定的字段名').Index Delphi/Pascal code1234567891011121314151617procedure TForm1.Calculate;begin cxGrid1DBTableView1.Columns[3].EditValue:= cxGrid1DBTableView1.Columns[1].EditValue+cxGrid1DBTableView1.Columns[2].EditValue;end ; procedure TForm1.cxGrid1DBTableView1Column1PropertiesChange( Sender: TObject);begin Calculate;end ; procedure TForm1.cxGrid1DBTableView1Column2PropertiesChange( Sender: TObject);begin Calculate;end ;44Delphi/Pascal code 12345678procedure TForm1.Calculate;var x1,x2:Variant;begin x1:=cxGrid1DBTableView1.Columns[1].EditValue; x2:=cxGrid1DBTableView1.Columns[2].EditValue; if VarIsNull(x1) or VarIsNull(x2) then exit; cxGrid1DBTableView1.Columns[3].EditValue:=x1 * x2;end ;。

cxgrid 单元格格式

cxgrid 单元格格式

CxGrid(ExpressQuantumGrid)是DevExpress公司提供的一个用于Delphi和C++Builder的强大的数据网格控件。

在CxGrid中,你可以通过事件和属性设置单元格的格式。

以下是一些设置CxGrid单元格格式的常见方法:### 1. **使用事件设置单元格格式**你可以使用`OnGetContentStyle` 事件来设置单元格的样式。

在这个事件中,你可以访问单元格的值,并根据需要修改样式。

```delphiprocedure TForm1.cxGrid1DBTableView1GetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;out AStyle: TcxStyle);beginif AItem.Index = 2 then // Assuming the third column (index 2)beginif ARecord.Values[AItem.Index] < 0 thenAStyle := cxStyleRed; // Set the style to a red font for negative valuesend;end;```### 2. **使用条件格式化**CxGrid支持条件格式化,可以在属性编辑器中直接设置。

在设计时,你可以通过右键单击CxGrid,选择"Edit Options",然后在"Item Properties" 对话框中找到"Styles" 选项卡。

在这里,你可以设置条件格式化规则,例如根据单元格的值来更改字体颜色、背景颜色等。

### 3. **使用数据映射设置格式**你可以在"DataController" 中使用数据映射设置格式。

cxGrid技巧汇总

cxGrid技巧汇总

cxGrid技巧汇总2009-04-01 12:48==========================================================================在主从TableView中根据主TableView得到对应的从TableViewvarADetailDC: TcxGridDataController;AView: TcxCustomGridTableView;beginwith cxGrid1DBTableView1.DataController doADetailDC := TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)); AView := ADetailDC.GridView;end;==============================================================================定位在第一行并显示内置编辑器cxDBVerticalGrid1.FocusedRow := cxDBVerticalGrid1.Rows[0];cxDBVerticalGrid1.ShowEdit;==============================================================================隐藏 "<No data to display>" 字符串该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空来隐藏该文本。

uses cxClasses, cxGridStrs;...cxSetResourceString(@scxGridNoDataInfoText, '');//如果"<No data to display>" 字符串已经显示,需要调用:<View>.LayoutChanged;============================================================删除应用过滤后的行varI: Integer;beginwith <GridView> dofor I := 0 to ViewData.RecordCount - 1 dobeginViewData.Records[0].Focused := True;DataController.DataSet.Delete;end;=============================================================根据单元的值设置样式procedure <aForm>.<aColumn>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);beginif ARecord.Values[AItem.Index] = aSomeValue thenAStyle := <aSomeStyle>;end;procedure <aForm>.<aView>StylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);varAColumn: TcxCustomGridTableItem;beginAColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Email');if VarToStr(ARecord.Values[AColumn.Index]) = '' thenAStyle := cxStyleNullEmail;end;==============================================================================TcxCustomGridTableView.FindItemByName, TcxGridDBTableView.GetColumnByFieldName or TcxGridDBDataController.GetItemByFieldNamewith cxGrid1DBBandedTableView1.DataController doAValue := Values[FocusedRecordIndex, GetItemByFieldName('SomeFieldName').Index]; ===================================================================动态生成BandedViewvarAView: TcxCustomGridView;beginAView := <cxGrid>.CreateView(TcxGridDBBandedTableView); TcxGridDBBandedTableView(AView).DataController.DataSource := <DataSource>; TcxGridDBBandedTableView(AView).Bands.Add;with TcxGridDBBandedTableView(AView).Bands.Add dobeginVisible := False;FixedKind := fkLeft;end;TcxGridDBBandedTableView(AView).DataController.CreateAllItems;<cxGridLevel>.GridView := AView;======================================================================当底层数据集为空时显示一条空记录procedure <Form>.<cxGrid>Enter(Sender: TObject);varView: TcxGridDBTableView;beginView := TcxGridDBTableView((Sender as TcxGrid).FocusedView);if View.DataController.DataSet.IsEmpty thenbeginView.DataController.DataSet.Append;View.Controller.EditingController.ShowEdit;end;end;=======================================================================在当前View插入记录使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data Controller,之后使用Data Controller的方法来操作数据:- Append- Insert- Post- Cancel- DeleteFocused- DeleteSelection示例:varARecIndex: Integer;…View.DataController.Append;ARecIndex := View.DataController.FocusedRecordIndex;View.DataController.Values[ARecIndex, SomeItemIndex] := SomeValue;View.DataController.Post;另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的方法来操作数据。

CXGRID控件使用说明

CXGRID控件使用说明

CXGRID控件使用说明tcxgrid控件:属性:activelevel:当前层borderstyle:窗口风格color:颜色Focusedview:当前视图;字体:字体leveltabs:类似pagecontrols头设置captionalgnment:标题对齐方式images:图标style:风格levels:Rootleveloptions:层选项detailtabsposition:类似pagecontrols头显示位置;tabsforemptydetails:如果数据为空是否显示tabsTcxgridlevel组件:属性:激活:通过阅读和写作激活这一层;controls:读写指向tcxgrid;Canbevisible:读取是否可以设置可见;count:读取子层个数;显示:读取图层标题;ismaster:读取是否cxgrid的最上层;Items:读取层组,例如:Items[0]访问第一层;级别:读取层的级别;visiblecount:读取可见层个数visibleindex:读取可见索引个数Visibleitems:读取可见层组,例如:Visibleitems[0]访问第一个可见层标题:读取和写入层标题;gridview:指定或读取该层的grid显示;imageindex:读写图标索引选项:tcxgridlevel选项detailframecolor:读或写明细表格颜色detailframwidth:读或写明细表格Detailabsposition:读或写选项卡位置,类似于pagecontrolstabsstyles:styletab:读或设置tab样式Tabsbackground:阅读或设置选项卡背景样式visible:读或设置是否可见方法:add:增加一个level;级别[i]。

添加:添加一个子级别;tcxgriddbbandedtableview组件:属性:backgroundbitmaps:背景图片选项background:背景图Bandbackground:带背景bankreader:带背景内容:细节区域中的背景过滤器Box:过滤器区域中的背景页脚:脚注背景组:组背景页眉:列页眉背景预览:预览区域中的背景bands:带列表datacontroller:数据控制datasource:数据源Detailkeyfieldnames:设置主从表运行时详细表的键字段名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cxgrid获取选中行列,排序规则
取列值
i := cxGrid1DBBandedTableView1.Controller.FocusedColumn.Index;
cxGrid1DBBandedTableView1.DataController.GetValue(cxGrid1DBBandedTableView1.Controller.SelectedRows[0].RecordIndex,i); cxGrid1DBTableView1.DataController.Values[行,列]
取得焦点
cxGrid1DBTableView1.Columns[5].FocusWithSelection;
cxGrid1DBTableView1.Columns[4].Focused:=True;
得到当前点击的单元格的值
uses Clipbrd;
OnCellClick事件代码:
procedure TForm1.cxGrid1DBTableView1CellClick(
Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
var
v : Variant;
begin
v := ACellViewInfo.Value;//值
Clipboard.AsText := vartostr(v);//保存到clipboard
end;
cxGrid的DBTableView的名称为dgtv1
1. 返回选中的行数gdtv1.DataController.GetSelectedCount;
2. 返回选中行的索引: gdtv1.DataController.GetSelectedRowIndex(0) , 表示第一个选中行的索引
3. 返回选中行的数据;
var
I, J:Integer;
begin
for I:=0 to gdtv1.DataController.GetSelectedCount - 1 do begin
J := gdtv1.DataController.GetSelectedRowIndex(I);
ShowMessage(VarToStr(gdtv1.DataController.GetValue(J, 0))); //选择中行的第列的值
end;
end;
4. 获取cxGrid排序规则
const
OrderArray: array[soNone..soDescending] of string = ('None', 'ASC', 'DESC');
var
I: integer;
S, OrderStr: string;
begin
for I := 0 to gdtv1.SortedItemCount - 1 do begin
if S <> '' then
S := S + ', ';
OrderStr := OrderStr + gdtv1.SortedItems[I].DataBinding.DefaultCaption + ' ';
OrderStr := OrderStr + OrderArray[TcxDataSortOrder(gdtv1.SortedItems[I].SortOrder)];
S := S + OrderStr;
end;
ShowMessage('ORDER BY ' + S);
CXGRID中修改获得焦点单元格的值我想做一个这样的功能,通过鼠标选取几个单元格后,一起修改它们的值。

问题代码如下:
var
i,j:integer;
UpVal:Double;
InputVal:string;
begin
if (btv_DPSetting.DataController.GetSelectedCount>0) then
begin
InputVal:=InputBox('输入框','请输入上调幅度(必须是数字值):','0');
if (TryStrToFloat(InputVal,UpVal)) then
begin
btv_DPSetting.DataController.BeginUpdate;
for i :=0 to btv_DPSetting.Controller.SelectedRowCount-1 do
begin
for j :=0 to btv_DPSetting.ColumnCount-1 do
begin
if btv_DPSetting.Columns[j].Selected
And checkEdtType(btv_DPSetting.Columns[j].DataBinding.ValueType) then
begin
btv_DPSetting.DataController.Controller.SelectedRecords[i].Values[j]:=
btv_DPSetting.DataController.Controller.SelectedRecords[i].Values[j]+UpVal;
end;//if
end;//for
end;//for
btv_DPSetting.DataController.EndUpdate;
end;
end;//if
这个代码知道只能实现修改表面显示的值,在POST后无法保存到数据库中。

麻烦大家帮帮忙!。

相关文档
最新文档