首页 [精品]cxGrid的应用方法

[精品]cxGrid的应用方法

举报
开通vip

[精品]cxGrid的应用方法[精品]cxGrid的应用方法 cxGrid的使用方法 cxGrid功能强大,适合做企业级的复杂查询。非常方便。 但是对其用法介绍的并不多,在此总结他人的使用经验和自己的一点小经验,供大家参考。 (,)动态设置显示格式 procedure,,,,,SetDisplayFormat(ACtrlData:,,,,,TClientDataSet; ,,,,,TbView:,,,,,TcxGridDBTableView); var ,,,,,i:,,,,,integer; begin ,,,,,if,,,,...

[精品]cxGrid的应用方法
[精品]cxGrid的应用方法 cxGrid的使用方法 cxGrid功能强大,适合做企业级的复杂查询。非常方便。 但是对其用法介绍的并不多,在此总结他人的使用经验和自己的一点小经验,供大家参考。 (,)动态设置显示 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 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; (,)显示行号 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; (,)设置显示格式,我的项目要求先动态添加字段,这时不知道字段类型,所以设置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.0 00'; ,,,,, ,,,,, ,,,,, ,,,,,Continue; ,,,,, ,,,,, ,,,,,end; ,,,,, ,,,,, ,,,,,if,,,,,Pos('QUANTITY',,,,,,UpperCase(cxDBViewMaster.DataController.DataSet.Fields[i].FieldName)),, ,,,>,,,,,0,,,,,then ,,,,, ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,, ,,,,,TNumericField(cxDBViewMaster.DataController.DataSet.Fields[i]).DisplayFormat,,,,,:=,,,,,'#,##0.0 00'; ,,,,, ,,,,, ,,,,, ,,,,,Continue; ,,,,, ,,,,, ,,,,,end; ,,,,, ,,,,, ,,,,, if,,,,,Pos('MONEY',,,,,,UpperCase(cxDBViewMaster.DataController.DataSet.Fields[i].FieldName)),,,,, >,,,,,0,,,,,then ,,,,, ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,, ,,,,,TNumericField(cxDBViewMaster.DataController.DataSet.Fields[i]).DisplayFormat,,,,,:=,,,,,'#,##0.0 0'; ,,,,, ,,,,, ,,,,, ,,,,,Continue; ,,,,, ,,,,, ,,,,,end; ,,,,, end; ,,,,,end; end; 最近在学习使用cxGrid,安装的版本是ExpressQuantumGrid,,,,, ,,,,,Suite,,,,, ,,,,,v5.10,,,,, ,,,,, ,,,,,我发现这个控件功能虽然强大,但是非常难用。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,现在我手头就有几个问题还没解决:,,,,, ,,,,, ,,,,,1)主从模式下导出Excel中文会产生乱码,而且从 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 没有导出。,,,,, ,,,,, ,,,,,我不知道是不是因为我的字段名包括单引号的原因。,,,,, ,,,,, ,,,,,导出代码:ExportGrid4ToExcel(FileName,,,,,, ,,,,,cxGrid);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,2)主从模式下通过按钮对从表添加/删除行,代码怎幺写。,,,,, ,,,,, ,,,,,附:单表添加/删除行的代码,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormAccount.cxButtonNewClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvAccount.DataController.Append;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvAccount.Columns[0].Focused,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxGrid.SetFocus;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormAccount.cxButtonDeleteClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Self.tvAccount.DataController.RowCount,,,,, ,,,,,=,,,,, ,,,,,0,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Application.MessageBox('确认删除当前记录?',,,,,, ,,,,,'确认删除',,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,MB_YesNo,,,,, ,,,,,+,,,,, ,,,,,MB_IconQuestion),,,,, ,,,,,=,,,,, ,,,,,IDNO,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvAccount.DataController.DeleteFocused;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,3)动态创建主从结构出错(Compiler没错,运行时出现系统错误0000000018),,,,,, ,,,,, ,,,,,我使用了二个ADOStoreProcedure作主从表,,,,, ,,,,, ,,,,,代码如下:,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level:,,,,, ,,,,,TcxGridLevel;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView:,,,,, ,,,,,TcxGridDBTableView;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level,,,,, ,,,,,:=,,,,, ,,,,,cxGrid1.Levels[0].Add;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView,,,,, ,,,,,:=,,,,, ,,,,,TcxGridDBTableView(cxGrid1.CreateView(TcxGridDBTableView));,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.DataSource,,,,, ,,,,,:=,,,,, ,,,,,Self.dsDetail;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.KeyFieldNames,,,,, ,,,,,:=,,,,, ,,,,,'PurchOrderID;POLineNbr;PromiseDate;ReceiverDate';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.MasterKeyFieldNames,,,,, ,,,,,:=,,,,, ,,,,,'VendorID';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.DetailKeyFieldNames,,,,, ,,,,,:=,,,,, ,,,,,'VendorID';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.DataModeController.SmartRefresh,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsCustomize.ColumnHiding,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsCustomize.ColumnsQuickCustomization,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsData.Deleting,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsData.Inserting,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsView.Indicator,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level.GridView,,,,, ,,,,,:=,,,,, ,,,,,GridView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView,,,,, ,,,,,:=,,,,, ,,,,,TcxGridDBTableView(cxGrid1.Levels[0].GridView);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.KeyFieldNames,,,,, ,,,,,:=,,,,, ,,,,,'VendorID';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.OptionsView.GroupByBox,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//显示主表内容,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.BeginUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.ClearItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.DataController.CreateAllItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.EndUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//显示明细表内容,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView,,,,, ,,,,,:=,,,,, ,,,,,TcxGridDBTableView(cxGrid1.Levels[0].Items[0].GridView);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.BeginUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.ClearItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.CreateAllItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.DataController.Refresh;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,GridView.EndUpdate;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 小技巧:用代码展开/收缩主从结构,,,,, ,,,,, ,,,,,Self.tvDepartment.ViewData.Expand(True);,,,,, ,,,,, ,,,,,Self.tvDepartment.ViewData.Collaspe(True);,,,,, ,,,,, ,,,,,注:tvDepartment为主表对应的TableView 此楼回复Re: ,,,,, 你说的这几个问题我也遇到过。,,,,, ,,,,, ,,,,,第一个问题是编码的问题,修改了其中关于编码的函数,OK.,,,,, ,,,,, ,,,,,第二个问题在cxGrid的社区可以找到解答,但从表必须满足某种条件,例如关键字排序。,,,,, ,,,,, ,,,,,第三个问题的解决办法,你可以尝试在动态创建的代码前后加上:,,,,, ,,,,, ,,,,,grid.beginupdate;,,,,, ,,,,, ,,,,,...,,,,, ,,,,, ,,,,,grid.endupdate,,,,, ,,,,, ,,,,,来解决。 此楼回复Re: ,,,,, 没用过,,,,, ,,,,, ,,,,,不要经常使用三方控件 此楼回复Re: ,,,,, to,,,,, ,,,,,tttk(网络芝麻):,,,,, ,,,,, ,,,,,第一个问题:如何修改啊,贴出代码,,,,, ,,,,, ,,,,,第二个问题:没搜到啊,,,,, ,,,,, ,,,,,第三个问题:试一下再说 此楼回复Re: ,,,,, 不要经常使用三方控件,,,,, ,,,,, ,,,,,======================,,,,, ,,,,, ,,,,,我感觉不用cxGrid的话,没必要用Delphi了,呵呵 此楼回复Re: ,,,,, 楼上这话是不是有点问题?DELPHI能做得事情很多很多,难道非要用CXGRID?CXGRID不是用DELPHI做出来得? 此楼回复Re: ,,,,, 没用过..... 此楼回复Re: ,,,,, 回复人:,,,,, ,,,,,zxkid(没有人会像我这样...),,,,, ,,,,,(,,,,, ,,,,,),,,,, ,,,,,信誉: 101,,,,, ,,,,, ,,,,,2006-01-06,,,,, ,,,,,16:58:00,,,,, ,,,,, ,,,,,得分:,,,,, ,,,,,0,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,不要经常使用三方控件,,,,, ,,,,, ,,,,,======================,,,,, ,,,,, ,,,,,我感觉不用cxGrid的话,没必要用Delphi了,呵呵,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,**********,,,,, ,,,,, ,,,,,楼主乃天人也~~ 此楼回复Re: ,,,,, 呵呵 此楼回复Re: ,,,,, cxGrid比较不错,我也使用过导出到Excel,没有遇到你说的乱码,,,,, ,,,,, ,,,,, ,,,,, ,,,,,主从表也没有问题的,其实跟单表操作还不是一回事 此楼回复Re: ,,,,, up 此楼回复Re: ,,,,, 没用过cxGrid,以后考虑 此楼回复Re: ,,,,, 楼主乃天人也~~,,,,, ,,,,, ,,,,,=============================,,,,, ,,,,, ,,,,,Delphi下有cxGrid,,,,,, ,,,,,.NET下有XtraGrid,,,,,, ,,,,,它们都是同一公司出的。,,,,, ,,,,, ,,,,,迟早都会转到.NET,所以。。。 此楼回复Re: ,,,,, 路过 此楼回复Re: ,,,,, 用过,挺好,只会使用最简单的。 此楼回复Re: ,,,,, 发一个邮件给我,我把解决乱码后的源代码发一分给你,放到你的项目文件夹下即可。,,,,, ,,,,, ,,,,,tttk2000@hotmail.com 此楼回复Re: ,,,,, 第二个问题:;issueid=B2691 此楼回复Re: ,,,,, 谢谢tttk(网络芝麻),,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,第二个问题:我现在直接让用户用导航条的删除/添加按钮了。根据你给的网址上的内容我知道大概该怎幺写了,有空再试试。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,第一个问题:不光是乱码问题,还有从表内容没导出的问题。,,,,, ,,,,, ,,,,,只有一个表的话是不会出现乱码的。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,第三个问题:还没来得及试。 此楼回复Re: ,,,,, 第一个问题:看了一下帮助,原来cxGrid不支持主从表的导出,只能导出主表(顶层表)的内容。晕 此楼回复Re: ,,,,, 贴一些小技巧,希望与各位使用cxGrid的朋友共同交流,,,,, ,,,,, ,,,,,各位有什幺好个技巧也可以贴出来:,,,,, ,,,,, ,,,,, ,,,,, ,,,,,技巧二:在内置右键菜单的后面增加菜单项,,,,, ,,,,, ,,,,, ,,,,, ,,,,,首先应在Form上加一个cxGridPopupMenu控件,,,,, ,,,,,以启用右键菜单,,,,, ,,,,, ,,,,,UseBuildInPopupMenus设为True,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.FormCreate(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AMenu:,,,,, ,,,,,TComponent;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,,, ,,,,,FSubMenuItem:,,,,, ,,,,,TMenuItem;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AMenu,,,,, ,,,,,:=,,,,, ,,,,,nil;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,cxGridPopupMenu.BuiltInPopupMenus.Count,,,,, ,,,,,=,,,,, ,,,,,0,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AMenu,,,,, ,,,,,:=,,,,, ,,,,,cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu;,,,,,//第一个内置右键菜单(表头菜单),,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Assigned(AMenu),,,,, ,,,,,and,,,,, ,,,,,AMenu.InheritsFrom(TPopupMenu),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).AutoHotkeys,,,,, ,,,,,:=,,,,, ,,,,,maManual;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//手动热键,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//-------------------------,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'-';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miLineForGroup';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//展开所有组,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miExpandAllGroup';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'展开所有组(&X)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miExpandAllGroupClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//收缩所有组,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miCollapseAllGroup';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'收缩所有组(&O)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miCollapseAllGroupClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//-------------------------,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'-';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//过滤面板,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miFilterPanel';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'过滤面板(&P)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//自动显示,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miFilterPanelAuto';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'自动(&A)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.RadioItem,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.GroupIndex,,,,, ,,,,,:=,,,,, ,,,,,5;,,,,,//指定同一组,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Checked,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miFilterPanelClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Add(FSubMenuItem);,,,,,//加入二级子菜单,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//总是显示,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miFilterPanelAlways';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'总是显示(&W)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.RadioItem,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.GroupIndex,,,,, ,,,,,:=,,,,, ,,,,,5;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miFilterPanelClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Add(FSubMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//从不显示,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miFilterPanelNerver';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'从不显示(&N)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.RadioItem,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.GroupIndex,,,,, ,,,,,:=,,,,, ,,,,,5;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FSubMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miFilterPanelClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Add(FSubMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//自定义过滤,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miCustomFilter';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'自定义过滤(&M)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,miCustomFilterClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//过滤管理器,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miFilterBuilder';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,,,,,, ,,,,,44);,,,,,//添加图标图像,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.ImageIndex,,,,, ,,,,,:=,,,,, ,,,,,TPopupMenu(AMenu).Images.Count,,,,, ,,,,,-,,,,, ,,,,,1; ,,,,,//指定图标序号,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'过滤管理器';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,Self.miFilterBuilderClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//---------------------,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'-';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//导出,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miExport';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,,,,,, ,,,,,37);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.ImageIndex,,,,, ,,,,,:=,,,,, ,,,,,TPopupMenu(AMenu).Images.Count,,,,, ,,,,,-,,,,, ,,,,,1;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'导出(&E)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,Self.miExportClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//打印,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem.Create(Self);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Name,,,,, ,,,,,:=,,,,, ,,,,,'miPrint';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.Caption,,,,, ,,,,,:=,,,,, ,,,,,'打印(&P)';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,,,,,, ,,,,,14);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.ImageIndex,,,,, ,,,,,:=,,,,, ,,,,,TPopupMenu(AMenu).Images.Count,,,,, ,,,,,-,,,,, ,,,,,1;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FMenuItem.OnClick,,,,, ,,,,,:=,,,,, ,,,,,Self.miPrintClick;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TPopupMenu(AMenu).Items.Add(FMenuItem);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miExportClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FileName,,,,,, ,,,,,FileExt,,,,,, ,,,,,msg:,,,,, ,,,,,String;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Self.aqyQuery.IsEmpty,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,msg,,,,, ,,,,,:=,,,,, ,,,,,'没有导出数据...';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Application.MessageBox(PChar(msg),,,,,, ,,,,,PChar(Application.Title),,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,MB_OK,,,,, ,,,,,or,,,,, ,,,,,MB_IconWarning);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.SaveDialogExport.Filter,,,,, ,,,,,:=,,,,, ,,,,,'Excel文件,,,,, ,,,,,(*.xls)|*.xls|XML文件,,,,, ,,,,,(*.xml)|*.xml',,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,+,,,,, ,,,,,'|文本文件,,,,, ,,,,,(*.txt)|*.txt|网页文件,,,,, ,,,,,(*.html)|*.html';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.SaveDialogExport.Title,,,,, ,,,,,:=,,,,, ,,,,,'导出为';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,not,,,,, ,,,,,Self.SaveDialogExport.Execute,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FileName,,,,, ,,,,,:=,,,,, ,,,,,Self.SaveDialogExport.FileName;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FileExt,,,,, ,,,,,:=,,,,, ,,,,,LowerCase(ExtractFileExt(FileName));,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,FileExt,,,,, ,,,,,=,,,,, ,,,,,'.xls',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ExportGrid4ToExcel(FileName,,,,,, ,,,,,Self.cxGrid1),,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,,if,,,,, ,,,,,FileExt,,,,, ,,,,,=,,,,, ,,,,,'.xml',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ExportGrid4ToXML(FileName,,,,,, ,,,,,Self.cxGrid1),,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,,if,,,,, ,,,,,FileExt,,,,, ,,,,,=,,,,, ,,,,,'.txt',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ExportGrid4ToText(FileName,,,,,, ,,,,,Self.cxGrid1),,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,,if,,,,, ,,,,,FileExt,,,,, ,,,,,=,,,,, ,,,,,'.html',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ExportGrid4ToHTML(FileName,,,,,, ,,,,,Self.cxGrid1),,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,msg,,,,, ,,,,,:=,,,,, ,,,,,'不支持的导出文件类型...';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Application.MessageBox(PChar(msg),,,,,, ,,,,,PChar(Application.Title),,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,MB_OK,,,,, ,,,,,or,,,,, ,,,,,MB_IconError);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,msg,,,,, ,,,,,:=,,,,, ,,,,,'导出完成...';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Application.MessageBox(PChar(msg),,,,,, ,,,,,PChar(Application.Title),,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,MB_OK,,,,, ,,,,,or,,,,, ,,,,,MB_IconInformation);,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miPrintClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//打印,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.dxComponentPrinter.Preview(True,,,,,, ,,,,,Self.dxComponentPrinterLink1);,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.cxGridPopupMenuPopup(ASenderMenu:,,,,, ,,,,,TComponent;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AHitTest:,,,,, ,,,,,TcxCustomGridHitTest;,,,,, ,,,,,X,,,,,, ,,,,,Y:,,,,, ,,,,,Integer;,,,,, ,,,,,var,,,,, ,,,,,AllowPopup:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,GetHitTypeByHitCode(AHitTest.HitTestCode),,,,, ,,,,,=,,,,, ,,,,,gvhtColumnHeader,,,,, ,,,,,then,,,,,//右击列标题时,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//if,,,,, ,,,,,tvResult.DataController.Groups.GroupingItemCount,,,,, ,,,,,>,,,,, ,,,,,0,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,tvResult.GroupedColumnCount,,,,, ,,,,,>,,,,, ,,,,,0,,,,, ,,,,,then,,,,,//有分组时显示,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miLineForGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miLineForGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miFilterBuilderClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//过滤管理器,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//弹出Filter,,,,, ,,,,,Builder,,,,, ,,,,,Dialog对话框,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.Filtering.RunCustomizeDialog;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miCustomFilterClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AHitTest:,,,,, ,,,,,TcxCustomGridHitTest;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//自定义过滤,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//弹出Custom,,,,, ,,,,,Filter,,,,, ,,,,,Dialog对话框,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AHitTest,,,,, ,,,,,:=,,,,, ,,,,,cxGridPopupMenu.HitTest;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,GetHitTypeByHitCode(AHitTest.HitTestCode),,,,, ,,,,,=,,,,, ,,,,,gvhtColumnHeader,,,,, ,,,,,then,,,,,//获得右击的列,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);,,,,, , ,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miFilterPanelClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,mi:,,,,, ,,,,,TMenuItem;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//隐藏/显示过滤面板,,,,, ,,,,, ,,,,, ,,,,, ,,,,,mi,,,,, ,,,,,:=,,,,, ,,,,,TMenuItem(Sender);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,mi.Checked,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,mi.Name,,,,, ,,,,,=,,,,, ,,,,,'miFilterPanelAlways',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.Filtering.Visible,,,,, ,,,,,:=,,,,, ,,,,,fvAlways,,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,,if,,,,, ,,,,,mi.Name,,,,, ,,,,,=,,,,, ,,,,,'miFilterPanelNerver',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.Filtering.Visible,,,,, ,,,,,:=,,,,, ,,,,,fvNever,,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.Filtering.Visible,,,,, ,,,,,:=,,,,, ,,,,,fvNonEmpty;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miExpandAllGroupClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//展开所有组,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.DataController.Groups.FullExpand;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormItemList.miCollapseAllGroupClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//收缩所有组,,,,, ,,,,, ,,,,, ,,,,, ,,,,,tvResult.DataController.Groups.FullCollapse;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 在用,留名 此楼回复Re: ,,,,, 技巧三,,,,, ,,,,,按条件计算合计值,,,,, ,,,,, ,,,,, ,,,,, ,,,,,在Footer的第一列显示[合计:],,,,, ,,,,, ,,,,,加一个Summary项,Column设为Grid的第一列,Kind设为skNone,,,,, ,,,,, ,,,,,在该Summary项的OnGetText事件中,输入:,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems 2GetText(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Sender:,,,,, ,,,,,TcxDataSummaryItem;,,,,, ,,,,,const,,,,, ,,,,,AValue:,,,,, ,,,,,Variant;,,,,, ,,,,,AIsFooter:,,,,, , ,,,,Boolean;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,,AText:,,,,, ,,,,,String);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AText,,,,, ,,,,,:=,,,,, ,,,,,'合计:';,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,按条件汇总:,,,,, ,,,,, ,,,,,在TableView的DataController->Summary->FooterSummary->OnSummary事件中,输入:,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ASender:,,,,, ,,,,,TcxDataSummaryItems;,,,,, ,,,,,Arguments:,,,,, ,,,,,TcxSummaryEventArguments;,,,,, ,, ,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,,OutArguments:,,,,, ,,,,,TcxSummaryEventOutArguments);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//得到字段名,,,,, ,,,,,TcxDBDataSummaryItem(Arguments.SummaryItem).FieldName;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,(ASender.DataController.Values[Arguments.RecordIndex,,,,,, ,,,,,tvExpenseLevel.Index],,,,, ,,, ,,>,,,,, ,,,,,1),,,,, ,,,,, ,,,,, ,,,,,//只统计Level列=1的值,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,and,,,,, ,,,,,(TcxDBDataSummaryItem(Arguments.SummaryItem).Kind,,,,, ,,,,,=,,,,, ,,,,,skSum),, ,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,OutArguments.Value,,,,, ,,,,,:=,,,,, ,,,,,0;,,,,,//Level,,,,, ,,,,,>,,,,, ,,,,,1的统计值设为0,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 借贵地一用,问个CXGrid问题,在cxgrid中如何使一些行不能编辑,如:字段isenable,,,,, ,,,,,=,,,,, ,,,,,false的行 此楼回复Re: ,,,,, 楼上的问题,,,,, ,,,,, ,,,,,请参考下面的技巧,,,,, ,,,,, ,,,,, ,,,,, ,,,,,技巧四:根据某列的值设定其它列的可编辑性,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TFormUser.tvUserEditing(Sender:,,,,, ,,,,,TcxCustomGridTableView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AItem:,,,,, ,,,,,TcxCustomGridTableItem;,,,,, ,,,,,var,,,,, ,,,,,AAllow:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//如果第三列值为True,则第4列不能修改,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,(tvUser.Controller.FocusedRecord.Values[2],,,,, ,,,,,=,,,,, ,,,,,True),,,,, ,,,,,and,,,,, ,,,,,(AItem.Index,,,,, ,,,,,=,,,,, ,,,,,4),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AAllow,,,,, ,,,,,:=,,,,, ,,,,,False,,,,, ,,,,, ,,,,, ,,,,, ,,,,,else,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AAllow,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 技巧五:保存/恢复Grid布局,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//恢复布局,,,,, ,,,,, ,,,,,IniFileName,,,,, ,,,,,:=,,,,, ,,,,,ExtractFilePath(Application.ExeName),,,,, ,,,,,+,,,,, ,,,,,'Layout\',,,,, ,,,,,+,,,,, ,,,,,Self.Name,,,,, ,,,,,+,,,,, ,,,,,'.ini';,,,,, ,,,,, ,,,,,if,,,,, ,,,,,FileExists(IniFileName),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvResult.RestoreFromIniFile(IniFileName),,,,,//从布局文件中恢复,,,,, ,,,,, ,,,,,else,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvResult.BeginUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,i,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,Self.tvResult.ItemCount,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvResult.Items[i].ApplyBestFit;,,,,,//调整为最佳宽度,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Self.tvResult.EndUpdate;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//保存布局,,,,, ,,,,, ,,,,,IniFileName,,,,, ,,,,,:=,,,,, ,,,,,ExtractFilePath(Application.ExeName),,,,, ,,,,,+,,,,, ,,,,,'Layout\',,,,, ,,,,,+,,,,, ,,,,,Self.Name,,,,, ,,,,,+,,,,, ,,,,,'.ini';,,,,, ,,,,, ,,,,,if,,,,, ,,,,,not,,,,, ,,,,,DirectoryExists(ExtractFileDir(IniFileName)),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,CreateDir(ExtractFileDir(IniFileName));,,,,, ,,,,, ,,,,,Self.tvResult.StoreToIniFile(IniFileName);,,,,,//保存为布局文件,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 借用地问一下:在,,,,, ,,,,,cxgrid中,如果我同时选中主表与子表中的记录,怎幺样能同时进行对其所选记录进行处理呢。,,,,, ,,,,, ,,,,,我现在只能判断,,,,, ,,,,,焦点是在主表还是从表中,然后只能对主表或子表中的数据进行处理。,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, 看来用cxGrid人不多啊,,,,, ,,,,, ,,,,, ,,,,, ,,,,,再多贴一些技巧,需要的朋友顶一下,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,在主从TableView中根据主TableView得到对应的从TableView,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADetailDC:,,,,, ,,,,,TcxGridDataController;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AView:,,,,, ,,,,,TcxCustomGridTableView;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,cxGrid1DBTableView1.DataController,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADetailDC,,,,, ,,,,,:=,,,,, ,,,,,TcxGridDataController(GetDetailDataController(FocusedRecordInd ex,,,,,, ,,,,,0));,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AView,,,,, ,,,,,:=,,,,, ,,,,,ADetailDC.GridView;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================================,,,,, ,, ,,, ,,,,, ,,,,, ,,,,,定位在第一行并显示内置编辑器,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxDBVerticalGrid1.FocusedRow,,,,, ,,,,,:=,,,,, ,,,,,cxDBVerticalGrid1.Rows[0];,,,,, ,,,,, ,,,,,cxDBVerticalGrid1.ShowEdit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================================,,,,, ,, ,,, ,,,,, ,,,,, ,,,,,隐藏,,,,, ,,,,,"",,,,, ,,,,,字符串,,,,, ,,,,, ,,,,, ,,,,, ,,,,,该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空,,,,, ,,,,, ,,,,,来隐藏该文本。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,,cxClasses,,,,,, ,,,,,cxGridStrs;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,...,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxSetResourceString(@scxGridNoDataInfoText,,,,,, ,,,,,'');,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//如果"",,,,, ,,,,,字符串已经显示,需要调用:,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.LayoutChanged;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,删除应用过滤后的行,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,ViewData.RecordCount,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ViewData.Records[0].Focused,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController.DataSet.Delete;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,=============================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,根据单元的值设置样式,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,.StylesGetContentStyle(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Sender:,,,,, ,,,,,TcxCustomGridTableView;,,,,, ,,,,,ARecord:,,,,, ,,,,,TcxCustomGridRecord;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AItem:,,,,, ,,,,,TcxCustomGridTableItem;,,,,, ,,,,,out,,,,, ,,,,,AStyle:,,,,, ,,,,,TcxStyle);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ARecord.Values[AItem.Index],,,,, ,,,,,=,,,,, ,,,,,aSomeValue,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AStyle,,,,, ,,,,,:=,,,,, ,,,,,;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,.StylesGetContentStyle(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Sender:,,,,, ,,,,,TcxCustomGridTableView;,,,,, ,,,,,ARecord:,,,,, ,,,,,TcxCustomGridRecord;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AItem:,,,,, ,,,,,TcxCustomGridTableItem;,,,,, ,,,,,out,,,,, ,,,,,AStyle:,,,,, ,,,,,TcxStyle);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AColumn:,,,,, ,,,,,TcxCustomGridTableItem;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AColumn,,,,, ,,,,,:=,,,,, ,,,,,(Sender,,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableView).GetColumnByFieldName('E mail');,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,VarToStr(ARecord.Values[AColumn.Index]),,,,, ,,,,,=,,,,, ,,,,,'',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AStyle,,,,, ,,,,,:=,,,,, ,,,,,cxStyleNullEmail;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxCustomGridTableView.FindItemByName,,,,,, ,,,,,TcxGridDBTableView.GetColumnByFieldName,,,,, ,,,,,or,,,,, ,,,,, ,,,,,TcxGridDBDataController.GetItemByFieldName,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,cxGrid1DBBandedTableView1.DataController,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AValue,,,,, ,,,,,:=,,,,, ,,,,,Values[FocusedRecordIndex,,,,,, ,,,,,GetItemByFieldName('SomeField Name').Index];,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,动态生成BandedView,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AView:,,,,, ,,,,,TcxCustomGridView;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AView,,,,, ,,,,,:=,,,,, ,,,,,.CreateView(TcxGridDBBandedTableView);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridDBBandedTableView(AView).DataController.DataSource,,,,, ,,,,,:=,,,,, ,,,,,;,,,,, ,,, ,, ,,,,, ,,,,, ,,,,,TcxGridDBBandedTableView(AView).Bands.Add;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,TcxGridDBBandedTableView(AView).Bands.Add,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Visible,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FixedKind,,,,, ,,,,,:=,,,,, ,,,,,fkLeft;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridDBBandedTableView(AView).DataController.CreateAllItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.GridView,,,,, ,,,,,:=,,,,, ,,,,,AView;,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, ======================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,当底层数据集为空时显示一条空记录,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,
.Enter(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View:,,,,, ,,,,,TcxGridDBTableView;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View,,,,, ,,,,,:=,,,,, ,,,,,TcxGridDBTableView((Sender,,,,, ,,,,,as,,,,, ,,,,,TcxGrid).FocusedView);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,View.DataController.DataSet.IsEmpty,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.DataSet.Append;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.Controller.EditingController.ShowEdit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,=======================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,在当前View插入记录,,,,, ,,,,, ,,,,, ,,,,, ,,,,,使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data,,,,, ,,,,,Controller,,,,,, ,,,,, ,,,,,之后使用Data,,,,, ,,,,,Controller的方法来操作数据:,,,,, ,,,,, ,,,,,-,,,,, ,,,,,Append,,,,, ,,,,, ,,,,,-,,,,, ,,,,,Insert,,,,, ,,,,, ,,,,,-,,,,, ,,,,,Post,,,,, ,,,,, ,,,,,-,,,,, ,,,,,Cancel,,,,, ,,,,, ,,,,,-,,,,, ,,,,,DeleteFocused,,,,, ,,,,, ,,,,,-,,,,, ,,,,,DeleteSelection,,,,, ,,,,, ,,,,, ,,,,, ,,,,,示例:,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ARecIndex:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,…,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.Append;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ARecIndex,,,,, ,,,,,:=,,,,, ,,,,,View.DataController.FocusedRecordIndex;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.Values[ARecIndex,,,,,, ,,,,,SomeItemIndex],,,,, ,,,,,:=,,,,, ,,,,,SomeValue;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.Post;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的,,,,, ,,,,, ,,,,,方法来操作数据。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,激活内置编辑控件,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,1),,,,, ,,,,,.Controller.EditingController.ShowEdit();,,,,, ,,,,, ,,,,, ,,,,,2),,,,, ,,,,,.Controller.EditingController.StartEditShowingTimer();,,,,, ,,,,, ,,,,, ,,,,,3),,,,, ,,,,,.Controller.EditingItem,,,,, ,,,,,:=,,,,, ,,,,,;,,,,, ,,,,, ,,,,, ,,,,,4),,,,, ,,,,,.Editing,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,隐藏内置编辑控件,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.Controller.EditingController.HideEdit(True);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,移除一个分组列,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.GroupIndex,,,,, ,,,,,:=,,,,, ,,,,,-1;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.Visible,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,保存修改到数据库,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,.FormClose(Sender:,,,,, ,,,,,TObject;,,,,, ,,,,,var,,,,, ,,,,,Action:,,,,, ,,,,,TCloseAction);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,(.FocusedView,,,,, ,,,,,<>,,,,, ,,,,,nil),,,,, ,,,,,and,,,,, ,,,,,(.FocusedView.DataController.EditState,,,,, ,,,,,<>,,,,, ,,,,,[]),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.FocusedView.DataController.Post;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,设置内置右键菜单,,,,, ,,,,, ,,,,, ,,,,, ,,,,,内置右键菜单包括二个菜单:cxGridStdHeaderMenu,,,,,, ,,,,,TcxGridStdFooterMenu,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,,cxGridStdPopupMenu;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.cxGridPopupMenu1Popup(ASenderMenu:,,,,, ,,,,,TComponent;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AHitTest:,,,,, ,,,,,TcxCustomGridHitTest;,,,,, ,,,,,X,,,,,, ,,,,,Y:,,,,, ,,,,,Integer;,,,,, ,,,,,var,,,,, ,,,,,AllowPopup:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ASenderMenu,,,,, ,,,,,is,,,,, ,,,,,TcxGridStdHeaderMenu,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridStdHeaderMenu(ASenderMenu).OnPopup,,,,, ,,,,,:=,,,,, ,,,,,StdHeaderMenuPopup;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.StdHeaderMenuPopup(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,TcxGridStdHeaderMenu(Sender).Items,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,Count,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Items[I].Caption,,,,, ,,,,,=,,,,, ,,,,,'Group,,,,, ,,,,,By,,,,, ,,,,,Box',,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Items[I].Enabled,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,System.Break;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,得到选中记录的值(MultiSelect),,,,, ,,,,, ,,,,, ,,,,, ,,,,,1),,,,, ,,,,,View.DataController.DataModeController.GridMode,,,,, ,,,,,=,,,,, ,,,,,False时,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,RecIdx,,,,, ,,,,,:=,,,,, ,,,,,View.Controller.SelectedRecords[i].RecordIndex;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ColIdx,,,,, ,,,,,:=,,,,, ,,,,,View.DataController.GetItemByFieldName(AFieldName).Index;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,OutputVal,,,,, ,,,,,:=,,,,, ,,,,,View.DataController.Values[RecIdx,,,,,, ,,,,,ColIdx];,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//RecID,,,,, ,,,,,:=,,,,, ,,,,,View.DataController.GetRecordId(RecIdx);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//OutputVal,,,,, ,,,,,:=,,,,, ,,,,,ADataSet.Lookup(View.DataController.KeyFieldNames,,,,,, ,,,,,RecID,,,,,, , ,,,,AFieldName);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,2),,,,, ,,,,,Bkm:,,,,,string;,,,,, View.DataController.DataModeController.GridMode,,,,, ,,,,,=,,,,, ,,,,,True时,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Bkm,,,,, ,,,,,:=,,,,, ,,,,,View.DataController.GetSelectedBookmark(ASelectedRecordIndex);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ADataSet.BookmarkValid(TBookmark(Bkm)),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADataSet.Bookmark,,,,, ,,,,,:=,,,,, ,,,,,Bkm;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,OutputVal,,,,, ,,,,,:=,,,,, ,,,,,ADataSet.FieldByName(AFieldName).Value;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.BeginUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.BeginLocate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,try,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,make,,,,, ,,,,,changes,,,,, ,,,,,here…,,,,, ,,,,, ,,,,, ,,,,, ,,,,,finally,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.EndLocate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.EndUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,,//直接读取选择的单元格内容 ,,,,, var ,,,,, ,,,,, I,,,,,,J:,,,,,Integer; ,,,,, ,,,,, val:,,,,,Variant; ,,,,, begin ,,,,, ,,,,, Result,,,,,:=,,,,,0; ,,,,, ,,,,, for,,,,,I,,,,,:=,,,,,0,,,,,to,,,,,TableView.Controller.,,,,,SelectedRowCount,,,,,-,,,,,1,,,,,do ,,,,, ,,,,, ,,,,, for,,,,,J,,,,,:=,,,,,0,,,,,to,,,,,TableView.Controller.,,,,,SelectedColumnCount,,,,,-,,,,,1,,,,,do ,,,,, ,,,,, ,,,,, begin ,,,,, ,,,,, ,,,,, ,,,,, val,,,,,:=,,,,,TableView.DataController.GetValue( ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, TableView.Controller.SelectedRows[I].RecordIndex, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, TableView.Controller.SelectedColumns[J].Index); ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Showmessage(val); ,,,,, ,,,,, ,,,,, end; ,,,,, end; ,,,,,=============================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,在GridMode禁用内置的右键Footer菜单,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,,cxGridStdPopupMenu;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,cxGridPopupMenuOnPopup(...),,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,(ASenderMenu,,,,, ,,,,,is,,,,, ,,,,,TcxGridStdFooterMenu),,,,, ,,,,,and,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.DataController.DataModeController.GridMode,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AllowPopup,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,主从表任何时候只能展开一个组,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.ADetailDataControllerCollapsing(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADataController:,,,,, ,,,,,TcxCustomDataController;,,,,, ,,,,,ARecordIndex:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,,AAllow:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,C:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AAllow,,,,, ,,,,,:=,,,,, ,,,,,False;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,C,,,,, ,,,,,:=,,,,, ,,,,,0;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,ADataController.RecordCount,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ADataController.GetDetailExpanding(I),,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Inc(C);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,C,,,,, ,,,,,>,,,,, ,,,,,1,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AAllow,,,,, ,,,,,:=,,,,, ,,,,,True;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.ADetailDataControllerExpanding(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADataController:,,,,, ,,,,,TcxCustomDataController;,,,,, ,,,,,ARecordIndex:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,,AAllow:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADataController.CollapseDetails;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.FormCreate(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxGrid1DBTableView1.DataController.OnDetailExpanding,,,,, ,,,,,:=,,,,, ,,,,,ADetailDataControllerExpa nding;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxGrid1DBTableView1.DataController.OnDetailCollapsing,,,,, ,,,,,:=,,,,, ,,,,,ADetailDataControllerColla psing;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,=================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,动态创建层次(Level)和视图(View),,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Grid:,,,,, ,,,,,TcxGrid;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level:,,,,, ,,,,,TcxGridLevel;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View:,,,,, ,,,,,TcxGridDBTableView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Creates,,,,, ,,,,,a,,,,, ,,,,,Grid,,,,, ,,,,,instance,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Grid,,,,, ,,,,,:=,,,,, ,,,,,TcxGrid.Create(SomeOwner);,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Grid.Parent,,,,, ,,,,,:=,,,,, ,,,,,SomeParent;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Creates,,,,, ,,,,,a,,,,, ,,,,,Level,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level,,,,, ,,,,,:=,,,,, ,,,,,Grid.Levels.Add;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level.Name,,,,, ,,,,,:=,,,,, ,,,,,'SomeLevelName';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Creates,,,,, ,,,,,a,,,,, ,,,,,View,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View,,,,, ,,,,,:=,,,,, ,,,,,Grid.CreateView(TcxGridDBTableView),,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.Name,,,,, ,,,,,:=,,,,, ,,,,,'SomeViewName';,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,…,,,,, ,,,,,and,,,,, ,,,,,binds,,,,, ,,,,,it,,,,, ,,,,,to,,,,, ,,,,,the,,,,, ,,,,,Level,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Level.GridView,,,,, ,,,,,:=,,,,, ,,,,,View;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Hooks,,,,, ,,,,,up,,,,, ,,,,,the,,,,, ,,,,,View,,,,, ,,,,,to,,,,, ,,,,,the,,,,, ,,,,,data,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.DataSource,,,,, ,,,,,:=,,,,, ,,,,,SomeDataSource;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,…,,,,, ,,,,,and,,,,, ,,,,,creates,,,,, ,,,,,all,,,,, ,,,,,columns,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.DataController.CreateAllItems;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, 此楼回复Re: ,,,,, ======================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,获得Group,,,,, ,,,,,Footer合计行对应的记录,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.cxGrid1DBTableView1CustomDrawFooterCell(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Sender:,,,,, ,,,,,TcxGridTableView;,,,,, ,,,,,ACanvas:,,,,, ,,,,,TcxCanvas;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AViewInfo:,,,,, ,,,,,TcxGridColumnHeaderViewInfo;,,,,, ,,,,,var,,,,, ,,,,,ADone:,,,,, ,,,,,Boolean);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ALevel,,,,,, ,,,,,ADataGroupIndex:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AGridRecord,,,,,, ,,,,,AGroupRecord:,,,,, ,,,,,TcxCustomGridRecord;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,AViewInfo,,,,, ,,,,,is,,,,, ,,,,,TcxGridRowFooterCellViewInfo,,,,, ,,,,,and,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Row,,,,, ,,,,,footer,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,(TcxGridDBColumn(AViewInfo.Column).DataBinding.FieldName,,,,, ,,,,,=,,,,, ,,,,,'Area'),,,,, ,,,,,then,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Area,,,,, ,,,,,column,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AGridRecord,,,,, ,,,,,:=,,,,, ,,,,,TcxGridRowFooterCellViewInfo(AViewInfo).GridRecord;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ALevel,,,,, ,,,,,:=,,,,, ,,,,,TcxGridRowFooterCellViewInfo(AViewInfo).Container.GroupLevel;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ADataGroupIndex,,,,, ,,,,,:=,,,,, ,,,,,Sender.DataController.Groups.DataGroupIndexByR owIndex[AGridRecord.Index];,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ADataGroupIndex,,,,, ,,,,,<>,,,,, ,,,,,-1,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AGroupRecord,,,,, ,,,,,:=,,,,, ,,,,,AGridRecord;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,while,,,,, ,,,,,AGroupRecord.Level,,,,, ,,,,,<>,,,,, ,,,,,ALevel,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AGroupRecord,,,,, ,,,,,:=,,,,, ,,,,,AGroupRecord.ParentRecord;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,AViewInfo.Text,,,,, ,,,,,:=,,,,, ,,,,,AGroupRecord.DisplayTexts[0];,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===========================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,访问过滤之后的记录,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Memo1.Lines.Clear;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,cxGrid1DBTableView1.DataController,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,FilteredRecordCount,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Memo1.Lines.Add(DisplayTexts[FilteredRecordIndex[I],,,,,, ,,,,,0]);,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,获得单元的Font,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxGrid1DBTableView1.ViewInfo.RecordsViewInfo.Items[1].GetCellViewInfoByItem(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxGrid1DBTableView1Company).EditViewInfo.Font;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,根据Level名称找到Level对象,,,,, ,,,,, ,,,,, ,,,,, ,,,,,function,,,,, ,,,,,GetLevelByName(AGrid:,,,,, ,,,,,TcxGrid;,,,,, ,,,,,ALevelName:,,,,, ,,,,,string):,,,,, ,,,,,TcxGridLev el;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,function,,,,, ,,,,,LoopThroughLevels(ALevel:,,,,, ,,,,,TcxGridLevel;,,,,, ,,,,,ALevelName:,,,,, ,,,,,string):,,,, , ,,,,,TcxGridLevel;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,nil;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,ALevel.Count,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ALevel[I].Name,,,,, ,,,,,=,,,,, ,,,,,ALevelName,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,ALevel[I];,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,ALevel[I].Count,,,,, ,,,,,>,,,,, ,,,,,0,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,LoopThroughLevels(ALevel[I],,,,,, ,,,,,ALevelName);,,,,, , ,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Result,,,,, ,,,,,<>,,,,, ,,,,,nil,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,I:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,nil;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,for,,,,, ,,,,,I,,,,, ,,,,,:=,,,,, ,,,,,0,,,,, ,,,,,to,,,,, ,,,,,AGrid.Levels.Count,,,,, ,,,,,-,,,,, ,,,,,1,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,AGrid.Levels[I].Name,,,,, ,,,,,=,,,,, ,,,,,ALevelName,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,AGrid.Levels[I];,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,AGrid.Levels[I].Count,,,,, ,,,,,>,,,,, ,,,,,0,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Result,,,,, ,,,,,:=,,,,, ,,,,,LoopThroughLevels(AGrid.Levels[I],,,,,, ,,,,,ALevelName);,,,,, ,,,, , ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,Result,,,,, ,,,,,<>,,,,, ,,,,,nil,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Exit;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,指定Filter,,,,, ,,,,,Builder打开/保存过滤文件的默认路径,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,, ,,,,, ,,,,, ,,,,,...,,,,,, ,,,,,cxFilterControlDialog;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm.GridView1FilterControlDialogShow(,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TfmFilterControlDialog(Sender).OpenDialog.InitialDir,,,,, ,,,,,:=,,,,, ,,,,,'D:\',,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,保存/恢复带汇总行的布局,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.StoreToIniFile('c:\Grid.ini',,,,,, ,,,,,True,,,,,, ,,,,,[gsoUseSummary]);,,,,, ,,,,, ,,,,, ,,,,,.RestoreFromIniFile(,True,False,,,,, ,,,,,{or,,,,, ,,,,,True,,,,,, ,,,,,optional},[gsoUseSum mary]);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,取消过滤时移到第一行,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxCustomData;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TYour_Form.AViewDataControllerFilterChanged(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Filter:,,,,, ,,,,,TcxDataFilterCriteria;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,Sender,,,,, ,,,,,as,,,,, ,,,,,TcxDataFilterCriteria,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,, ,,,,,IsEmpty,,,,, ,,,,,then,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController.FocusedRowIndex,,,,, ,,,,,:=,,,,, ,,,,,0;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,=============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,排序后移到第一行,,,,, ,,,,, ,,,,, ,,,,, ,,,,,可以设置DataController.Options.FocusTopRowAfterSorting,,,,, ,,,,,:=,,,,, ,,,,,True,也可以使用如下的代 码:,,,,, ,,,,, ,,,,, ,,,,, ,,,,,uses,,,,, ,,,,, ,,,,, ,,,,, ,,,,,cxCustomData;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TYour_Form.Your_ViewDataControllerSortingChanged(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxCustomDataController(Sender).FocusedRowIndex,,,,, ,,,,,:=,,,,, ,,,,,0;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================================,,,,, ,, ,,, ,,,,, ,,,,, ,,,,,判断当前行是否第一行或最后一行,,,,, ,,,,, ,,,,, ,,,,, ,,,,,可以使用DataController的IsBOF,,,,,, ,,,,,IsEOF方法,或者:,,,,, ,,,,, ,,,,,.Controller.Controller.FocusedRow.IsFirst,,,,, ,,,,, ,,,,,.Controller.Controller.FocusedRow.IsLast,,,,, ,,,,, ,,,,, ,,,,, ,,,,,==============================================================================,,,,, ,, ,,, ,,,,, ,,,,, ,,,,,根据指定值查找记录,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController提供了好几个方法来得到指定值对应的RecordIndex,,,,, ,,,,, ,,,,,对于Bound,,,,, ,,,,,View可以使用FindRecordIndexByKeyValue方法,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,编辑和显示Blob字段,,,,, ,,,,, ,,,,, ,,,,, ,,,,,该字段的Properties设置为BlobEdit,并将BlobPaintStyle,,,,, ,,,,,属性设为,,,,, ,,,,,bpsText,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,得到可见行数,,,,, ,,,,, ,,,,, ,,,,, ,,,,,.ViewInfo.VisibleRecordCount,,,,, ,,,,, ,,,,, ,,,,, ,,,,,===============================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,保存后的行设置为当前行,,,,, ,,,,, ,,,,, ,,,,, ,,,,,const,,,,, ,,,,, ,,,,, ,,,,, ,,,,,CM_SETFOCUSEDRECORD,,,,, ,,,,,=,,,,, ,,,,,WM_USER,,,,, ,,,,,+,,,,, ,,,,,1002;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,type,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TForm1,,,,, ,,,,,=,,,,, ,,,,,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);,,,,, ,,,,, ,,,,, ,,,,, ,,,,,private,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,CMSetFocusedRecord(var,,,,, ,,,,,Msg:,,,,, ,,,,,TMessage);,,,,, ,,,,,message,,,,, ,,,,,CM_SETFOCUSEDRECORD;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,public,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,{,,,,, ,,,,,Public,,,,, ,,,,,declarations,,,,, ,,,,,},,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Form1:,,,,, ,,,,,TForm1;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FocusedIdx:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,implementation,,,,, ,,,,, ,,,,, ,,,,, ,,,,,{$R,,,,, ,,,,,*.dfm},,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.Timer1Timer(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,dxMemData1.AppendRecord(['',,,,,, ,,,,,IntToStr(Random(1000)),,,,,, ,,,,,Random(1000)]);,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.dxMemData1AfterPost(DataSet:,,,,, ,,,,,TDataSet);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,PostMessage(Handle,,,,,, ,,,,,CM_SETFOCUSEDRECORD,,,,,, ,,,,,Integer(cxGrid1DBTableView1),,,,, , ,,,,,MakeLParam(cxGrid1DBTableView1.Controller.FocusedRowIndex,,,,,, ,,,,,cxGrid1DBTableView1.Controller. TopRowIndex));,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.CMSetFocusedRecord(var,,,,, ,,,,,Msg:,,,,, ,,,,,TMessage);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridDBTableView(msg.WParam).Controller.FocusedRowIndex,,,,, ,,,,,:=,,,,, ,,,,,Msg.LParamLo;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridDBTableView(msg.WParam).Controller.TopRowIndex,,,,, ,,,,,:=,,,,, ,,,,,Msg.LParamHi;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.CheckBox1Click(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Timer1.Enabled,,,,, ,,,,,:=,,,,, ,,,,,TCheckBox(Sender).Checked;,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end.,,,,, ,,,,, ,,,,, ,,,,, ,,,,,=================================================================================,,,,, ,,,,, ,,,,, ,,,,, ,,,,,删除记录并获得焦点,,,,, ,,,,, ,,,,, ,,,,, ,,,,,procedure,,,,, ,,,,,TForm1.BtnDeleteClick(Sender:,,,,, ,,,,,TObject);,,,,, ,,,,, ,,,,,var,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FocusedRow,,,,,, ,,,,,TopRow:,,,,, ,,,,,Integer;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View:,,,,, ,,,,,TcxGridTableView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController:,,,,, ,,,,,TcxGridDataController;,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View,,,,, ,,,,,:=,,,,, ,,,,,cxGrid1.FocusedView,,,,, ,,,,,as,,,,, ,,,,,TcxGridTableView;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController,,,,, ,,,,,:=,,,,, ,,,,,View.DataController;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Remember,,,,, ,,,,,the,,,,, ,,,,,top,,,,, ,,,,,row,,,,, ,,,,,(the,,,,, ,,,,,vertical,,,,, ,,,,,scrollbar,,,,, ,,,,,posi tion),,,,, ,,,,, ,,,,, ,,,,, ,,,,,TopRow,,,,, ,,,,,:=,,,,, ,,,,,View.Controller.TopRowIndex;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Remember,,,,, ,,,,,the,,,,, ,,,,,focused,,,,, ,,,,,row(!),,,,, ,,,,,index,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FocusedRow,,,,, ,,,,,:=,,,,, ,,,,,DataController.FocusedRowIndex;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController.DeleteFocused;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,After,,,,, ,,,,,deletion,,,,, ,,,,,the,,,,, ,,,,,same,,,,, ,,,,,row,,,,, ,,,,,must,,,,, ,,,,,be,,,,, ,,,,,focused,,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,although,,,,, ,,,,,it,,,,, ,,,,,will,,,,, ,,,,,correspond,,,,, ,,,,,to,,,,, ,,,,,a,,,,, ,,,,,different,,,,, ,,,,,data,,,,, , ,,,,record,,,,, ,,,,, ,,,,, ,,,,, ,,,,,DataController.FocusedRowIndex,,,,, ,,,,,:=,,,,, ,,,,,FocusedRow;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//,,,,, ,,,,,Restore,,,,, ,,,,,the,,,,, ,,,,,top,,,,, ,,,,,row,,,,, ,,,,, ,,,,, ,,,,, ,,,,,View.Controller.TopRowIndex,,,,, ,,,,,:=,,,,, ,,,,,TopRow;,,,,, ,,,,, ,,,,,end;,,,,, //==================================================================================== 报表汇总的设置 数据库中的财务表为:,,,,, ,,,,, ,,,,, ,,,,, ,,,,,ID,,,,, ,,,,, ,,,,,收支类型,,,,, ,,,,, ,,,,,金额,,,,, ,,,,, ,,,,,其它属性,,,,, ,,,,, ,,,,, ,,,,, ,,,,,其中收支类型只有两种值:0,,,,, ,,,,,表示收入,1,,,,, ,,,,,表示支出,,,,, ,,,,,;金额都是正数。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,设置cxGrid的Footer,,,,, ,,,,,可以使得在显示时,列表的下方出现汇总行:“金额”的和,,,,, ,,,,, ,,,,,同样设置Default,,,,, ,,,,,For,,,,, ,,,,,Groups可以使得在用户拖动表头属性实现分组时,显示组内的汇总行:“金额”的和。,,,,, ,,,,, ,,,,, ,,,,, ,,,,,上面说的,用过cxGrid应该都会,下面就有这幺一个问题,,,,, ,,,,, ,,,,, ,,,,, ,,,,,如果我想使汇总行的值变为如下的值应该怎样实现:,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,收支类型为0的金额的和,,,,, ,,,,,-,,,,, ,,,,,收支类型为1的金额的和,,,,, ,,,,, ,,,,,实现Footer的功能好办,因为它的值不会变,自己用循环写一个就完了,但是Default,,,,, ,,,,,For,,,,, ,,,,,Groups 的功能就不好说了,因为它的值是根据用户拖动的属性计算的,而且还有可能是多层分组,想不出来了,所有到这来问,,,,, ,,,,, ,,,,,是不是要设置什幺属性,或者cxGrid根本就没这个功能,那该用什幺方法解决,希望哪位帮我解决,谢谢了先~,,,,, ,,,,, 给你一个例子,可能对你有帮助,,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,tvOrders.DataController.Summary,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,BeginUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,try,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,SummaryGroups.Clear;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//The,,,,, ,,,,,first,,,,, ,,,,,summary,,,,, ,,,,,group,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryGroups.Add,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//Add,,,,, ,,,,,proposed,,,,, ,,,,,grouping,,,,, ,,,,,column(s),,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridTableSummaryGroupItemLink(Links.Add).Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersCustomerID;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//Add,,,,, ,,,,,summary,,,,, ,,,,,items,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryItems.Add,,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableSummaryItem,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersPaymentAmount;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Kind,,,,, ,,,,,:=,,,,, ,,,,,skSum;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Format,,,,, ,,,,,:=,,,,, ,,,,,'Amount,,,,, ,,,,,Paid:,,,,, ,,,,,$,0';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryItems.Add,,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableSummaryItem,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersPaymentAmount;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Kind,,,,, ,,,,,:=,,,,, ,,,,,skCount;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Format,,,,, ,,,,,:=,,,,, ,,,,,'Records:,,,,, ,,,,,0';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//The,,,,, ,,,,,second,,,,, ,,,,,summary,,,,, ,,,,,group,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryGroups.Add,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//Add,,,,, ,,,,,proposed,,,,, ,,,,,grouping,,,,, ,,,,,column(s),,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,TcxGridTableSummaryGroupItemLink(Links.Add).Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersProductID;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,//Add,,,,, ,,,,,summary,,,,, ,,,,,items,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryItems.Add,,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableSummaryItem,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersQuantity;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Kind,,,,, ,,,,,:=,,,,, ,,,,,skSum;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Position,,,,, ,,,,,:=,,,,, ,,,,,spFooter;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Format,,,,, ,,,,,:=,,,,, ,,,,,'TOTAL,,,,, ,,,,,=,,,,, ,,,,,0';,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,with,,,,, ,,,,,SummaryItems.Add,,,,, ,,,,,as,,,,, ,,,,,TcxGridDBTableSummaryItem,,,,, ,,,,,do,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,begin,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Column,,,,, ,,,,,:=,,,,, ,,,,,tvOrdersPurchaseDate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Kind,,,,, ,,,,,:=,,,,, ,,,,,skMin;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,Position,,,,, ,,,,,:=,,,,, ,,,,,spFooter;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,finally,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,EndUpdate;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, ,,,,, ,,,,, ,,,,,end;,,,,, ,,,,, 2007-7-19,,,,,12:56:41 ,,,,, ,,,,,go,,,,,on,,,,, 订单号,,,,,商品名,,,,,单价,,,,,数量,,,,,金额 001,,,,,aa,,,,,11.00,,,,,2,,,,,22.00 001,,,,,bb,,,,,2.00,,,,,2,,,,,4.00 001,,,,,cc,,,,,3.00,,,,,3,,,,,9.00 ----------------------合计,,,,,7,,,,,35.00 002,,,,,ee,,,,,11.00,,,,,2,,,,,22.00 002,,,,,bb,,,,,3.00,,,,,2,,,,,6.00 002,,,,,cc,,,,,3.00,,,,,3,,,,,9.00 ----------------------合计,,,,,7,,,,,37.00 总计14,,,,,72.00 每个单号分一个小结,能实现吗,最后在底下实现总的合计 可以的,cxGrid的功能比你想象的还要强大。 1.你先放一个cxGrid,设置好View,设置View.DataController连接的DataSource 2.激活DataSource连接的DataSet,双击cxGrid,点击Retrieve,,,,,Fields,取得所有的Column 3.设置View的OptionsView.Footer=True,OptionsView.GroupFooters=True,这是为了把分组小计和总计面板显示出来 4.将“订单号”字段拖到cxGrid上方的分组面板(GroupbyBox),将数据按“订单号”分组。这时你会发现单身所有的数据都缩起来了,如果想使所有的数据都展开,可以设置 View.DataController.Options.dcoGroupsAlwaysExpanded=True 5.设置分组小计:把View.DataController.Summary.DefaultGroupSummaryItems点开,新增一个Item,Column属性在下拉里选择“数量”字段,FieldName属性为空,Format属性可以设置数值的显示格式,Kind属性下拉skSum加总,Position属性一定要选择spFooter。 6.设置总计:把View.DataController.Summary.FooterSummaryItems点开,新增一个Item,Column属性在下拉里选择“数量”字段,FieldName属性为空,Format属性可以设置数值的显示格式,Kind属性下拉skSum加总,Position属性一定要选择spFooter。 大功告成,按F9看一下胜利果实吧。 再奉送一个技巧,在Form1再放一个TcxGridPopupMenu控件,就在cxGrid控件旁边的那个,把TcxGridPopupMenu的Grid属性设置成你的cxGrid。 然后运行程序,在运行状态,点击Grid上的所有地方,左键或右键,你都会有意外收获。 ExpressQuantumGrid控件实在是太复杂,太庞大,最好的了解它的方法就是查帮助。,,,,, cxGrid的多选我一般都是用这个方法: //---------------,,,,,.Pas文件 unit,,,,,Unit1; interface uses Windows,,,,,,Messages,,,,,,SysUtils,,,,,,Variants,,,,,,Classes,,,,,,Graphics,,,,,,Controls,,,,,,Forms, Dialogs,,,,,,cxStyles,,,,,,cxCustomData,,,,,,cxGraphics,,,,,,cxFilter,,,,,,cxData,,,,,,cxEdit, DB,,,,,,cxDBData,,,,,,DBTables,,,,,,cxGridLevel,,,,,,cxGridCustomTableView, cxGridTableView,,,,,,cxGridDBTableView,,,,,,cxClasses,,,,,,cxControls, cxGridCustomView,,,,,,cxGrid,,,,,,cxLookAndFeelPainters,,,,,,cxGridRows,,,,,,cxContainer, cxCheckBox,,,,,,cxDataStorage; type TForm1,,,,,=,,,,,class(TForm) cxGrid1:,,,,,TcxGrid; cxGrid1DBTableView1:,,,,,TcxGridDBTableView; cxGrid1DBTableView1CustNo:,,,,,TcxGridDBColumn; cxGrid1DBTableView1Company:,,,,,TcxGridDBColumn; cxGrid1DBTableView1Addr1:,,,,,TcxGridDBColumn; cxGrid1DBTableView1City:,,,,,TcxGridDBColumn; cxGrid1DBTableView1State:,,,,,TcxGridDBColumn; cxGrid1DBTableView1Country:,,,,,TcxGridDBColumn; cxGrid1Level1:,,,,,TcxGridLevel; Table1:,,,,,TTable; DataSource1:,,,,,TDataSource; cxGrid1DBTableView1DBColumn1:,,,,,TcxGridDBColumn; procedure,,,,,FormCreate(Sender:,,,,,TObject); procedure,,,,,cxGrid1DBTableView1MouseDown(Sender:,,,,,TObject; Button:,,,,,TMouseButton;,,,,,Shift:,,,,,TShiftState;,,,,,X,,,,,,Y:,,,,,Integer); procedure,,,,,cxGrid1DBTableView1DBColumn1CustomDrawCell( Sender:,,,,,TcxCustomGridTableView;,,,,,ACanvas:,,,,,TcxCanvas; AViewInfo:,,,,,TcxGridTableDataCellViewInfo;,,,,,var,,,,,ADone:,,,,,Boolean); procedure,,,,,FormClose(Sender:,,,,,TObject;,,,,,var,,,,,Action:,,,,,TCloseAction); procedure,,,,,cxGrid1DBTableView1CustomDrawCell( Sender:,,,,,TcxCustomGridTableView;,,,,,ACanvas:,,,,,TcxCanvas; AViewInfo:,,,,,TcxGridTableDataCellViewInfo;,,,,,var,,,,,ADone:,,,,,Boolean); private AList:,,,,,TList; function,,,,,CheckList(ARecord:,,,,,TcxCustomGridRecord):,,,,,Boolean; {,,,,,Private,,,,,declarations,,,,,} public {,,,,,Public,,,,,declarations,,,,,} end; var Form1:,,,,,TForm1; implementation {$R,,,,,*.dfm} procedure,,,,,TForm1.FormCreate(Sender:,,,,,TObject); begin AList,,,,,:=,,,,,TList.Create; end; function,,,,,TForm1.CheckList(ARecord:,,,,,TcxCustomGridRecord):,,,,,Boolean; begin Result,,,,,:=,,,,,AList.IndexOf(Pointer(ARecord.RecordIndex)),,,,,<>,,,,,-,,,,,1; end; procedure,,,,,TForm1.cxGrid1DBTableView1MouseDown(Sender:,,,,,TObject; Button:,,,,,TMouseButton;,,,,,Shift:,,,,,TShiftState;,,,,,X,,,,,,Y:,,,,,Integer); var AHitTest:,,,,,TcxCustomGridHitTest; AGridRecord:,,,,,TcxCustomGridRecord; begin if,,,,,Sender,,,,,is,,,,,TcxGridSite,,,,,then begin with,,,,,TcxGridSite(Sender).GridView,,,,,do AHitTest,,,,,:=,,,,,ViewInfo.GetHitTest(X,,,,,,Y); if,,,,,(AHitTest.HitTestCode,,,,,=,,,,,htCell),,,,,and,,,,,(TcxGridDBColumn(TcxGridRecordCellHitTest,,,,,(AhitTes t).,,,,,Item,,,,,).,,,,,DataBinding,,,,,.,,,,,FieldName,,,,,=,,,,,),,,,,then AGridRecord,,,,,:=,,,,,TcxGridRecordCellHitTest(AHitTest).GridRecord else Exit; end; if,,,,,(AGridRecord,,,,,<>,,,,,nil),,,,,then if,,,,,CheckList(AGridRecord),,,,,then AList.Remove(Pointer(AGridRecord.RecordIndex)) else AList.Add(Pointer(AGridRecord.RecordIndex)); end; procedure,,,,,TForm1.cxGrid1DBTableView1DBColumn1CustomDrawCell( Sender:,,,,,TcxCustomGridTableView;,,,,,ACanvas:,,,,,TcxCanvas; AViewInfo:,,,,,TcxGridTableDataCellViewInfo;,,,,,var,,,,,ADone:,,,,,Boolean); begin if,,,,,AViewInfo.EditViewInfo,,,,,is,,,,,TcxCustomCheckBoxViewInfo,,,,,then TcxCustomCheckBoxViewInfo(AViewInfo.EditViewInfo).State:=,,,,,TcxCheckBoxState(CheckList(AViewInfo. GridRecord)); end; procedure,,,,,TForm1.FormClose(Sender:,,,,,TObject;,,,,,var,,,,,Action:,,,,,TCloseAction); begin AList.Free; end; procedure,,,,,TForm1.cxGrid1DBTableView1CustomDrawCell( Sender:,,,,,TcxCustomGridTableView;,,,,,ACanvas:,,,,,TcxCanvas; AViewInfo:,,,,,TcxGridTableDataCellViewInfo;,,,,,var,,,,,ADone:,,,,,Boolean); begin with,,,,,AViewInfo,,,,,do if,,,,,CheckList(GridRecord),,,,,then ACanvas.Brush.Color,,,,,:=,,,,,clHighlight else ACanvas.Brush.Color,,,,,:=,,,,,clWindow; ACanvas.Font.Color,,,,,:=,,,,,clBlack;,,,,,end; end. //---------------cxGrid的Dfm属性 object,,,,,cxGrid1:,,,,,TcxGrid Left,,,,,=,,,,,0 Top,,,,,=,,,,,0 Width,,,,,=,,,,,688 Height,,,,,=,,,,,446 Align,,,,,=,,,,,alClient TabOrder,,,,,=,,,,,0 object,,,,,cxGrid1DBTableView1:,,,,,TcxGridDBTableView OnMouseDown,,,,,=,,,,,cxGrid1DBTableView1MouseDown NavigatorButtons.ConfirmDelete,,,,,=,,,,,False OnCustomDrawCell,,,,,=,,,,,cxGrid1DBTableView1CustomDrawCell DataController.DataSource,,,,,=,,,,,DataSource1 DataController.DetailKeyFieldNames,,,,,=,,,,,CustNo DataController.KeyFieldNames,,,,,=,,,,,CustNo DataController.Summary.DefaultGroupSummaryItems,,,,,=,,,,,<> DataController.Summary.FooterSummaryItems,,,,,=,,,,,<> DataController.Summary.SummaryGroups,,,,,=,,,,,<> OptionsSelection.MultiSelect,,,,,=,,,,,True object,,,,,cxGrid1DBTableView1CustNo:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,CustNo end object,,,,,cxGrid1DBTableView1DBColumn1:,,,,,TcxGridDBColumn Caption,,,,,=,,,,,CheckColumn PropertiesClassName,,,,,=,,,,,TcxCheckBoxProperties Properties.DisplayUnchecked,,,,,=,,,,,False OnCustomDrawCell,,,,,=,,,,,cxGrid1DBTableView1DBColumn1CustomDrawCell Options.Editing,,,,,=,,,,,False Options.Filtering,,,,,=,,,,,False Options.IncSearch,,,,,=,,,,,False Options.ShowEditButtons,,,,,=,,,,,isebNever Options.Grouping,,,,,=,,,,,False Options.Sorting,,,,,=,,,,,False Width,,,,,=,,,,,123 end object,,,,,cxGrid1DBTableView1Company:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,Company end object,,,,,cxGrid1DBTableView1Addr1:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,Addr1 end object,,,,,cxGrid1DBTableView1City:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,City end object,,,,,cxGrid1DBTableView1State:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,State end object,,,,,cxGrid1DBTableView1Country:,,,,,TcxGridDBColumn DataBinding.FieldName,,,,,=,,,,,Country end end object,,,,,cxGrid1Level1:,,,,,TcxGridLevel GridView,,,,,=,,,,,cxGrid1DBTableView1 end end cyblueboy83,,,,,发表于,,,,,2005-12-9,,,,,11:30:45,,,,, 学习 hanlin2004,,,,,发表于,,,,,2005-12-9,,,,,13:14:52,,,,, 我一般是这样取cxGrid选中的纪录的值的: function,,,,,TFrameAccount.GetSelectedID:variant; var AccID:,,,,,array,,,,,of,,,,,string; i,,,,,,n:,,,,,Integer; Index:,,,,,Integer;,,,,, begin n,,,,,:=,,,,,cxGrid1DBTableView1.DataController.GetSelectedCount; for,,,,,i:=0,,,,,to,,,,,n,,,,,-,,,,,1,,,,,do begin Index,,,,,:=,,,,,cxGrid1DBTableView1.DataController.GetSelectedRowIndex(i); setlength(AccID,,,,,,length(AccID),,,,,+,,,,,1); AccID[High(AccID)],,,,,:=cxGrid1DBTableView1.DataController.GetRowValue(cxGrid1DBTableView1.DataC ontroller.GetRowInfo(Index),0);,,,,,//这里的0是Grid中列的索引,0表示第一个列绑定的字段 end;,,,,, result,,,,,:=,,,,,AccID; end; DevExpress,,,,,cxGrid的应用 在cxGrid下建立view,取名myView 1.,,,,,允许选择多条记录(MultiSelect): ,,,,, myView--OptionsSelection--MultiSelect,,,,,设成true 2.,,,,,取得选定行的值: ,,,,, myView->DataController->FocusedRowIndex,,,,,获得选择行的行号 ,,,,, myView->DataController->Values[myView->DataController->FocusedRowIndex+1][0],,,,,选择的行的第一列的值 ,,,,, myView->DataController->GetSelectedCount(),,,,,选择多行的行数 ,,,,, myView->DataController->GetSelectedRowIndex(行号n),,,,,所选多行里的第n行 3.,,,,,VerticalGrid的单元值 ,,,,, 控件->Properties->Value,,,,,获得单元的值,此值为variant类型,需要强制转换成AnsiString 4.,,,,,VerticalGrid里的CheckGroup的使用 ,,,,, 得到的值为:,,,,,(;1,3,8)此为选择了选项里的第1、3、8项 5.,,,,,VerticalGrid里验证 ,,,,, TcxEditorRow的properties->EditorProperties选MaskEdit,然后再选下面的MaskEdit和MaskKind,可以限定输入的东西 6.,,,,,TcxPopupEdit控件的应用,Form1加一个控件cxPopupEdit1 ,,,,, 属性里PopupControl指向你要弹出的窗体Form2,Form2里添加一个按钮,说明文件里添加 [Copy,,,,,to,,,,,clipboard],,,,,[,,,,,-,,,,,] CODE: private: ,,,,, ,,,,, ,,,,, ,,,,,//,,,,,User,,,,,declarations ,,,,, ,,,,, ,,,,, ,,,,,AnsiString,,,,,FEditValue; ,,,,, ,,,,, ,,,,, ,,,,,TcxPopupEdit,,,,,*FPopupEdit; 。。。 public: ,,,,, ,,,,, ,,,,, ,,,,,__property,,,,,AnsiString,,,,,EditValue,,,,,=,,,,,{read=FEditValue,write=FEditValue}; ,,,,, ,,,,, ,,,,, ,,,,,__property,,,,,TcxPopupEdit,,,,,*PopupEdit,,,,,=,,,,,{read=FPopupEdit,,,,,,write=FPopupEdit}; 在Form1的cxPopupEdit1控件的事件里添加下面的代码 [Copy,,,,,to,,,,,clipboard],,,,,[,,,,,-,,,,,] CODE: //--------------------------------------------------------------------------- void,,,,,__fastcall,,,,,TForm1::cxPopupEdit1PropertiesInitPopup(TObject,,,,,*Sender) { ,,,,, ,,,,, ,,,,, ,,,,,Form2->PopupEdit,,,,,=,,,,,(TcxPopupEdit*)Sender; } //--------------------------------------------------------------------------- void,,,,,__fastcall,,,,,TForm1::cxPopupEdit1PropertiesCloseUp(TObject,,,,,*Sender) { ,,,,, ,,,,, ,,,,, ,,,,,cxPopupEdit1->EditValue,,,,,=,,,,,Form2->EditValue; } 在Form1的按钮事件里可以加入 [Copy,,,,,to,,,,,clipboard],,,,,[,,,,,-,,,,,] CODE: ,,,,, ,,,,, ,,,,, ,,,,,FEditValue,,,,,=,,,,,"嘻嘻哈哈"; ,,,,, ,,,,, ,,,,, ,,,,,FAccepted,,,,,=,,,,,AAccepted; ,,,,, ,,,,, ,,,,, ,,,,,FPopupEdit->DroppedDown,,,,,=,,,,,false; //--------------------------------------------------------------------------- 7.,,,,,TcxGrid控件去掉上面的"Drag,,,,,a,,,,,column,,,,,header,,,,,here,,,,,to,,,,,group,,,,,by,,,,,that,,,,,column"栏 在控件的view的OptionsView属性里有一个GroupByBox,设为false即可 呵呵,写的有些乱,自己试着做吧 选择了若干条记录(MultiSelect) 选择了若干条记录(MultiSelect),现在要把这些选中的记录从该数据库复制到另一库中,该如何做,,,,,, 可以参考。我的程序是打印选择的记录,,,,,, 你可以保存到其它表就好。 var,,,,,i:integer; begin ,,,,,if,,,,,cxview1.DataController.Controller.SelectedRecordCount>0,,,,,then ,,,,, ,,,,,with,,,,,cxview1.DataController.DataSource.DataSet,,,,,do ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,,global.BQ_ppp('',3);,,,,,//只进行数据清除 ,,,,, ,,,,, ,,,,,for,,,,,i:=0,,,,,to,,,,,cxview1.DataController.Controller.SelectedRecordCount-1,,,,,do ,,,,, ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,, ,,,,,GotoBookmark(Pointer(cxview1.DataController.GetSelectedBookmark(i))); ,,,,, ,,,,, ,,,,, ,,,,,if,,,,,Pos('计',fields[0].AsString)=0,,,,,then ,,,,, ,,,,, ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,if,,,,,CheckBox2.Checked,,,,,then ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,global.BQ_ppp(fields[0].AsString,0)//立即进行标签打印,不把数据加到临时数据库。 ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,else ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,global.BQ_ppp(fields[0].AsString,1);,,,,,//加入数据到临时数据库。 ,,,,, ,,,,, ,,,,, ,,,,,end; ,,,,, ,,,,, ,,,,,end; ,,,,, ,,,,, ,,,,,if,,,,,CheckBox2.Checked=false,,,,,then,,,,,//打印中的数据只是包含一种标签。,,,,,不是多种标签打印, 集中打印临时数据库中的数据。 ,,,,, ,,,,, ,,,,, ,,,,,global.BQ_ppp('',2);,,,,,//只进行标签打印 ,,,,, ,,,,, ,,,,,Log_save('标签补打','标签打印'); ,,,,, ,,,,,end; end; 来自:lihoulong,,,,,,时间:2006-7-8,,,,,23:59:31,,,,,,ID:3500034 function,,,,,CopyRecord(var,,,,,recData:,,,,,TArrayVariant):,,,,,boolean; var ,,,,,i:,,,,,integer; begin ,,,,,with,,,,,FDataset,,,,,do ,,,,,begin ,,,,, ,,,,,SetLength(recData,,,,,,Fields.Count); ,,,,, ,,,,,for,,,,,i,,,,,:=,,,,,0,,,,,to,,,,,Fields.Count,,,,,-,,,,,1,,,,,do ,,,,, ,,,,, ,,,,,recData[i],,,,,:=,,,,,Fields[i].Value; ,,,,,end; ,,,,,Result,,,,,:=,,,,,true; end; function,,,,,TwpQDTable.PasteRecord( ,,,,,const,,,,,RecData:,,,,,array,,,,,of,,,,,Variant):,,,,,boolean; var ,,,,,fcnt, ,,,,, ,,,,,i:,,,,,integer; begin ,,,,,with,,,,,FDataset,,,,,do ,,,,,try ,,,,, ,,,,,fcnt,,,,,:=,,,,, Length(RecData),,,,,-,,,,,1; ,,,,, ,,,,,for,,,,,i,,,,,:=,,,,,0,,,,,to,,,,,fcnt,,,,,do ,,,,, ,,,,,begin ,,,,, ,,,,, ,,,,,if,,,,,FDataset.State,,,,,in,,,,,[dsBrowse],,,,,then ,,,,, ,,,,, ,,,,, ,,,,,Edit; ,,,,, ,,,,, ,,,,,Fields[i].Value,,,,,:=,,,,,RecData[i]; ,,,,, ,,,,,end; ,,,,, ,,,,,Result,,,,,:=,,,,,true; ,,,,,except ,,,,, ,,,,,Result,,,,,:=,,,,,false; ,,,,,end; end; 定义一个记录数组 for,,,,,i,,,,,:=,,,,,0,,,,,to,,,,,cxgrid.SelectedCount-1,,,,,do,,,,, begin ,,,,,依据关键字定位数据集,再执行CopyRecord end; 在粘贴的地方用pasteRecord 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中进行设置,,,,, 来源于大富翁论坛 使用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)怎样 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 多表头的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;,,,,, //这个是初始化的代码,,,,,, 2004-1-7,,,,,14:05:14 ,,,,, ,,,,,问题21,,,,, 21)ExpressQuantumGrid4.5的汉化包 在这里可以下载ExpressQuantumGrid4.5的汉化包,将文件直接覆盖到源文件就可以了。 如何在dxMemData1或cxGrid1中动态添加字段, Procedure,,,,,TcxGridDBTableView.CreateDefaultColumn; ,,,,, ,,,,, //建立默认的列 //Add,,,,,By,,,,,Pgt Var CxColumn:TcxGridDBColumn; FootItem:TcxDataSummaryItem; i:Integer; OldAutoWidth:Boolean; Begin If,,,,,Assigned(DataController.DataSource),,,,,And ,,,,, Assigned(DataController.DataSource.DataSet),,,,,And ,,,,, DataController.DataSource.DataSet.Active,,,,,Then,,,,,Begin ,,,,, With,,,,,DataController.DataSource.DataSet,,,,,Do,,,,,Begin ,,,,, ,,,,, ,,,,,While,,,,,ColumnCount>0,,,,,Do ,,,,, ,,,,, ,,,,, Columns[0].Free,,,,,; ,,,,, ,,,,, ,,,,,For,,,,,i:=0,,,,,to,,,,,FieldCount,,,,,-1,,,,,Do,,,,,Begin ,,,,, ,,,,, ,,,,, If,,,,,(Fields[i].DataType<>ftAutoInc),,,,,And,,,,,(UpperCase(Fields[i].FullName)<>'ID'),,,,,Then,,,,, Begin ,,,,, ,,,,, ,,,,, CxColumn:=Self.CreateColumn,,,,,; ,,,,, ,,,,, ,,,,, CxColumn.DataBinding.FieldName,,,,,:=,,,,,Fields[i].FullName,,,,,; ,,,,, ,,,,, ,,,,, CxColumn.HeaderAlignmentHorz,,,,,:=,,,,,taCenter,,,,,; ,,,,, ,,,,, ,,,,, CxColumn.HeaderAlignmentVert,,,,,:=,,,,,VaCenter,,,,,; ,,,,, ,,,,, ,,,,, If,,,,,CxColumn.Width,,,,,>150,,,,,Then,,,,,CxColumn.Width,,,,,:=,,,,,150,,,,,; ,,,,, ,,,,, ,,,,, If,,,,,i=0,,,,,Then,,,,,Begin ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FootItem,,,,,:=,,,,,DataController.Summary.FooterSummaryItems.Add,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FootItem.ItemLink,,,,,:=CxColumn,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FootItem.Format,,,,,:=,,,,,'共0条'; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,FootItem.Kind,,,,,:=,,,,,skCount,,,,,; ,,,,, ,,,,, ,,,,, End,,,,,Else,,,,,Begin ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,If,,,,,(Fields[i].DataType,,,,,=,,,,,ftFloat),,,,,And,,,,,(Pos('价',Fields[i].FullName)=0),,,,,Then,,,,,Begin ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem,,,,,:=,,,,,DataController.Summary.FooterSummaryItems.Add,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem.ItemLink,,,,,:=CxColumn,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, If,,,,,Pos('数量',Fields[i].FullName)<>0,,,,,Then ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem.Format,,,,,:=,,,,,',0;-,0' ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, Else,,,,,Begin ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem.Format,,,,,:=,,,,,',0.00;-,0.00',,,,,;,,,,,//,,,,,',,0.00;-,,0.00'; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, If,,,,,CxColumn.Width<80,,,,,Then,,,,,CxColumn.Width,,,,,:=,,,,,80,,,,,;,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, End; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem.DisplayName,,,,,:=,,,,,Fields[i].FullName,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, FootItem.Kind,,,,,:=,,,,,skSum,,,,,; ,,,,, ,,,,, ,,,,, ,,,,, ,,,,,End; ,,,,, ,,,,, ,,,,, End; ,,,,, ,,,,, ,,,,, End; ,,,,, ,,,,, ,,,,,End; ,,,,, ,,,,, ,,,,,OldAutoWidth,,,,,:=,,,,,Self.OptionsView.ColumnAutoWidth,,,,,; ,,,,, ,,,,, ,,,,,Self.OptionsView.ColumnAutoWidth,,,,,:=,,,,,True,,,,,; ,,,,, ,,,,, ,,,,,Self.OptionsView.ColumnAutoWidth,,,,,:=,,,,,OldAutoWidth,,,,,; ,,,,, End; End; End;
本文档为【[精品]cxGrid的应用方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:267KB
软件:Word
页数:112
分类:企业经营
上传时间:2018-02-22
浏览量:11