cxgrid 中选中一列的某记录,当焦点离开这个cxgrid后,如何使原来选中的记录变色显示? ( 积分: 50 )

  • 主题发起人 主题发起人 wyxriver
  • 开始时间 开始时间
W

wyxriver

Unregistered / Unconfirmed
GUEST, unregistred user!
目前项目需要选中一行记录后,再选另外一个cxgrid中的一行记录,但是第一个cxgrid中原来选中的项需要有明显的标志提示用户,目前只要焦点一离开cxgrid,原来选中的项虽然与没选中的稍有不同,可是差别太小了,如何加深颜色以标示其状态呢?
 
cxgrid1dbtableview1.DataController.Controller.FocusedRecord.Values[4];<br>&nbsp;&nbsp;cxgrid1dbtableview1.DataController.GetDisplayText(cxgrid1dbtableview1.DataController.FocusedRecordIndex,1)<br><br>&nbsp;&nbsp;cIndex:=cxgrid1dbtableview1.GetColumnByFieldName('pinming').Index;<br>&nbsp;&nbsp;s:=(cxgrid1dbtableview1.Controller.SelectedRows[0].RecordIndex,cIndex);<br>&nbsp;&nbsp;showmessage(cxgrid1dbtableview1.DataController.DataSource.DataSet.Fieldbyname('step_code').asstring);
 
好久没有写笔记了,现在有点时间,来篇。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;happycyp&nbsp;&nbsp;2007-7-19<br>cxGrid功能强大,适合做企业级的复杂查询。非常方便。<br>但是对其用法介绍的并不多,在此总结他人的使用经验和自己的一点小经验,供大家参考。<br><br>(1)动态设置显示格式<br>procedure&nbsp;SetDisplayFormat(ACtrlData:&nbsp;TClientDataSet;<br>&nbsp;&nbsp;TbView:&nbsp;TcxGridDBTableView);<br>var<br>&nbsp;&nbsp;i:&nbsp;integer;<br>begin<br>&nbsp;&nbsp;if&nbsp;ACtrlData.RecordCount&nbsp;&lt;=&nbsp;0&nbsp;then&nbsp;Exit;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;TbView.ClearItems;<br>&nbsp;&nbsp;&nbsp;&nbsp;ACtrlData.First;<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;:=&nbsp;0&nbsp;to&nbsp;ACtrlData.RecordCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;ACtrlData.FieldByName('SQBF_DisplayInGrid').AsString&nbsp;=&nbsp;'1'&nbsp;then&nbsp;//在表格中显示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;TbView.CreateColumn&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataBinding.FieldName&nbsp;:=&nbsp;ACtrlData.FieldByName('SQBF_FieldName').AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Caption&nbsp;:=&nbsp;ACtrlData.FieldByName('SQBF_Caption').AsString;&nbsp;//字段中文标题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hint&nbsp;:=&nbsp;ACtrlData.FieldByName('SQBF_Hint').AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width&nbsp;:=&nbsp;ACtrlData.FieldByName('SQBF_Width').AsInteger;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HeaderAlignmentHorz&nbsp;:=&nbsp;taCenter;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACtrlData.Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:&nbsp;Exception&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveLog('设置显示格式时出错:'&nbsp;+&nbsp;E.Message);<br>&nbsp;&nbsp;end;<br>end;<br><br>(2)显示行号<br>procedure&nbsp;TFmQueryBase.cxDBViewMasterCustomDrawIndicatorCell(<br>&nbsp;&nbsp;Sender:&nbsp;TcxGridTableView;&nbsp;ACanvas:&nbsp;TcxCanvas;<br>&nbsp;&nbsp;AViewInfo:&nbsp;TcxCustomGridIndicatorItemViewInfo;&nbsp;var&nbsp;ADone:&nbsp;Boolean);<br>var<br>&nbsp;&nbsp;FValue:&nbsp;string;<br>&nbsp;&nbsp;FBounds:&nbsp;TRect;<br>begin<br>&nbsp;&nbsp;FBounds&nbsp;:=&nbsp;AViewInfo.Bounds;<br>&nbsp;&nbsp;if&nbsp;(AViewInfo&nbsp;is&nbsp;TcxGridIndicatorRowItemViewInfo)&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ACanvas.FillRect(FBounds);<br>&nbsp;&nbsp;&nbsp;&nbsp;ACanvas.DrawComplexFrame(FBounds,&nbsp;clBlack,&nbsp;clBlack,&nbsp;[bBottom,&nbsp;bLeft,&nbsp;bRight],&nbsp;1);<br>&nbsp;&nbsp;&nbsp;&nbsp;FValue&nbsp;:=&nbsp;IntToStr(TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord.Index+1);<br>&nbsp;&nbsp;&nbsp;&nbsp;InflateRect(FBounds,&nbsp;-3,&nbsp;-2);&nbsp;//Platform&nbsp;specific.&nbsp;May&nbsp;not&nbsp;work&nbsp;on&nbsp;Linux.<br>&nbsp;&nbsp;&nbsp;&nbsp;ACanvas.Font.Color&nbsp;:=&nbsp;clBlack;<br>&nbsp;&nbsp;&nbsp;&nbsp;ACanvas.Brush.Style&nbsp;:=&nbsp;bsClear;<br>&nbsp;&nbsp;&nbsp;&nbsp;ACanvas.DrawText(FValue,&nbsp;FBounds,&nbsp;cxAlignCenter&nbsp;or&nbsp;cxAlignTop);<br>&nbsp;&nbsp;&nbsp;&nbsp;ADone&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;end;<br>end;<br>(3)设置显示格式,我的项目要求先动态添加字段,这时不知道字段类型,所以设置DisplayFormat不方便,我还没有找到好方法。<br>所以采用打开数据集后再设置:<br>procedure&nbsp;TFmQueryBase.cdsMasterAfterOpen(DataSet:&nbsp;TDataSet);<br>var<br>&nbsp;&nbsp;i:&nbsp;Integer;<br>begin<br>&nbsp;&nbsp;for&nbsp;i&nbsp;:=&nbsp;0&nbsp;to&nbsp;cxDBViewMaster.DataController.DataSet.FieldCount&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;cxDBViewMaster.DataController.DataSet.Fields&nbsp;is&nbsp;TNumericField&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Pos('AMOUNT',&nbsp;UpperCase(cxDBViewMaster.DataController.DataSet.Fields.FieldName))&nbsp;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TNumericField(cxDBViewMaster.DataController.DataSet.Fields).DisplayFormat&nbsp;:=&nbsp;'#,##0.000';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Pos('QUANTITY',&nbsp;UpperCase(cxDBViewMaster.DataController.DataSet.Fields.FieldName))&nbsp;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TNumericField(cxDBViewMaster.DataController.DataSet.Fields).DisplayFormat&nbsp;:=&nbsp;'#,##0.000';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Pos('MONEY',&nbsp;UpperCase(cxDBViewMaster.DataController.DataSet.Fields.FieldName))&nbsp;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TNumericField(cxDBViewMaster.DataController.DataSet.Fields).DisplayFormat&nbsp;:=&nbsp;'#,##0.00';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;&nbsp;<br><br><br><br>2007-7-19&nbsp;12:48:54&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;查看评语&amp;raquo;&amp;raquo;&amp;raquo;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;2007-7-19&nbsp;12:53:09&nbsp;&nbsp;&nbsp;&nbsp;别人的,转载http://www.showding.cn/item/cxGrid__182526.aspx<br><br>最近在学习使用cxGrid,安装的版本是ExpressQuantumGrid&nbsp;&nbsp;&nbsp;Suite&nbsp;&nbsp;&nbsp;v5.10&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我发现这个控件功能虽然强大,但是非常难用。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;现在我手头就有几个问题还没解决:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;1)主从模式下导出Excel中文会产生乱码,而且从表内容没有导出。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我不知道是不是因为我的字段名包括单引号的原因。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;导出代码:ExportGrid4ToExcel(FileName,&nbsp;&nbsp;&nbsp;cxGrid);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;2)主从模式下通过按钮对从表添加/删除行,代码怎么写。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;附:单表添加/删除行的代码&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormAccount.cxButtonNewClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvAccount.DataController.Append;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvAccount.Columns[0].Focused&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid.SetFocus;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormAccount.cxButtonDeleteClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Self.tvAccount.DataController.RowCount&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Application.MessageBox('确认删除当前记录?',&nbsp;&nbsp;&nbsp;'确认删除',&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_YesNo&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;MB_IconQuestion)&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;IDNO&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvAccount.DataController.DeleteFocused;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;3)动态创建主从结构出错(Compiler没错,运行时出现系统错误0000000018),&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我使用了二个ADOStoreProcedure作主从表&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;代码如下:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level:&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView:&nbsp;&nbsp;&nbsp;TcxGridDBTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxGrid1.Levels[0].Add;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridDBTableView(cxGrid1.CreateView(TcxGridDBTableView));&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.DataSource&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Self.dsDetail;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.KeyFieldNames&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'PurchOrderID;POLineNbr;PromiseDate;ReceiverDate';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.MasterKeyFieldNames&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'VendorID';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.DetailKeyFieldNames&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'VendorID';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.DataModeController.SmartRefresh&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsCustomize.ColumnHiding&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsCustomize.ColumnsQuickCustomization&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsData.Deleting&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsData.Inserting&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsView.Indicator&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level.GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;GridView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridDBTableView(cxGrid1.Levels[0].GridView);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.KeyFieldNames&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'VendorID';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.OptionsView.GroupByBox&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示主表内容&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.BeginUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.ClearItems;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.DataController.CreateAllItems;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.EndUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示明细表内容&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridDBTableView(cxGrid1.Levels[0].Items[0].GridView);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.BeginUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.ClearItems;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.CreateAllItems;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.DataController.Refresh;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridView.EndUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>小技巧:用代码展开/收缩主从结构&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;Self.tvDepartment.ViewData.Expand(True);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;Self.tvDepartment.ViewData.Collaspe(True);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;注:tvDepartment为主表对应的TableView<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>你说的这几个问题我也遇到过。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第一个问题是编码的问题,修改了其中关于编码的函数,OK.&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第二个问题在cxGrid的社区可以找到解答,但从表必须满足某种条件,例如关键字排序。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第三个问题的解决办法,你可以尝试在动态创建的代码前后加上:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;grid.beginupdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;grid.endupdate&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;来解决。<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>没用过&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;不要经常使用三方控件<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>to&nbsp;&nbsp;&nbsp;tttk(网络芝麻):&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第一个问题:如何修改啊,贴出代码&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第二个问题:没搜到啊&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第三个问题:试一下再说<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>不要经常使用三方控件&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;======================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我感觉不用cxGrid的话,没必要用Delphi了,呵呵<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>樓上這話是不是有點問題?DELPHI能做得事情很多很多,難道非要用CXGRID?CXGRID不是用DELPHI做出來得?<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>没用过.....<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>回复人:&nbsp;&nbsp;&nbsp;zxkid(没有人会像我这样...)&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;信誉:101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2006-01-06&nbsp;&nbsp;&nbsp;16:58:00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;得分:&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不要经常使用三方控件&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;======================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我感觉不用cxGrid的话,没必要用Delphi了,呵呵&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;**********&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;楼主乃天人也!!<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>呵呵<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>cxGrid比较不错,我也使用过导出到Excel,没有遇到你说的乱码&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;主从表也没有问题的,其实跟单表操作还不是一回事<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>up<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>没用过cxGrid,以后考虑<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>楼主乃天人也!!&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=============================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;Delphi下有cxGrid,&nbsp;&nbsp;&nbsp;.NET下有XtraGrid,&nbsp;&nbsp;&nbsp;它们都是同一公司出的。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;迟早都会转到.NET,所以。。。<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>路过<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>用过,挺好,只会使用最简单的。<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>发一个邮件给我,我把解决乱码后的源代码发一分给你,放到你的项目文件夹下即可。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;tttk2000@hotmail.com<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>第二个问题:https://www.devexpress.com/Support/Center/default.aspx?view=ViewIssue&amp;issueid=B2691<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>谢谢tttk(网络芝麻)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第二个问题:我现在直接让用户用导航条的删除/添加按钮了。根据你给的网址上的内容我知道大概该怎么写了,有空再试试。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第一个问题:不光是乱码问题,还有从表内容没导出的问题。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;只有一个表的话是不会出现乱码的。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;第三个问题:还没来得及试。<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>第一个问题:看了一下帮助,原来cxGrid不支持主从表的导出,只能导出主表(顶层表)的内容。晕<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>贴一些小技巧,希望与各位使用cxGrid的朋友共同交流&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;各位有什么好个技巧也可以贴出来:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;技巧二:在内置右键菜单的后面增加菜单项&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;首先应在Form上加一个cxGridPopupMenu控件&nbsp;&nbsp;&nbsp;以启用右键菜单&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;UseBuildInPopupMenus设为True&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.FormCreate(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AMenu:&nbsp;&nbsp;&nbsp;TComponent;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem,&nbsp;&nbsp;&nbsp;FSubMenuItem:&nbsp;&nbsp;&nbsp;TMenuItem;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AMenu&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;nil;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;cxGridPopupMenu.BuiltInPopupMenus.Count&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AMenu&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu;&nbsp;//第一个内置右键菜单(表头菜单)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Assigned(AMenu)&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;AMenu.InheritsFrom(TPopupMenu)&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).AutoHotkeys&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;maManual;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//手动热键&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//-------------------------&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'-';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miLineForGroup';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//展开所有组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miExpandAllGroup';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'展开所有组(&amp;X)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miExpandAllGroupClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//收缩所有组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miCollapseAllGroup';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'收缩所有组(&amp;O)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miCollapseAllGroupClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//-------------------------&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'-';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//过滤面板&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miFilterPanel';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'过滤面板(&amp;P)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自动显示&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miFilterPanelAuto';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'自动(&amp;A)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.RadioItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.GroupIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;5;&nbsp;//指定同一组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Checked&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miFilterPanelClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Add(FSubMenuItem);&nbsp;//加入二级子菜单&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//总是显示&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miFilterPanelAlways';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'总是显示(&amp;W)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.RadioItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.GroupIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;5;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miFilterPanelClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Add(FSubMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从不显示&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miFilterPanelNerver';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'从不显示(&amp;N)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.RadioItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.GroupIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;5;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSubMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miFilterPanelClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Add(FSubMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自定义过滤&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miCustomFilter';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'自定义过滤(&amp;M)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;miCustomFilterClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//过滤管理器&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miFilterBuilder';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,&nbsp;&nbsp;&nbsp;44);&nbsp;//添加图标图像&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.ImageIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1;&nbsp;//指定图标序号&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'过滤管理器';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Self.miFilterBuilderClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//---------------------&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'-';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//导出&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miExport';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,&nbsp;&nbsp;&nbsp;37);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.ImageIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'导出(&amp;E)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Self.miExportClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打印&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem.Create(Self);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'miPrint';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.Caption&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'打印(&amp;P)';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,&nbsp;&nbsp;&nbsp;14);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.ImageIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Images.Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FMenuItem.OnClick&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Self.miPrintClick;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPopupMenu(AMenu).Items.Add(FMenuItem);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miExportClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileName,&nbsp;&nbsp;&nbsp;FileExt,&nbsp;&nbsp;&nbsp;msg:&nbsp;&nbsp;&nbsp;String;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Self.aqyQuery.IsEmpty&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'没有导出数据...';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox(PChar(msg),&nbsp;&nbsp;&nbsp;PChar(Application.Title),&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_OK&nbsp;&nbsp;&nbsp;or&nbsp;&nbsp;&nbsp;MB_IconWarning);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.SaveDialogExport.Filter&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'Excel文件&nbsp;&nbsp;&nbsp;(*.xls)|*.xls|XML文件&nbsp;&nbsp;&nbsp;(*.xml)|*.xml'&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;'|文本文件&nbsp;&nbsp;&nbsp;(*.txt)|*.txt|网页文件&nbsp;&nbsp;&nbsp;(*.html)|*.html';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.SaveDialogExport.Title&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'导出为';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;&nbsp;Self.SaveDialogExport.Execute&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileName&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Self.SaveDialogExport.FileName;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileExt&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;LowerCase(ExtractFileExt(FileName));&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;FileExt&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'.xls'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExportGrid4ToExcel(FileName,&nbsp;&nbsp;&nbsp;Self.cxGrid1)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;FileExt&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'.xml'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExportGrid4ToXML(FileName,&nbsp;&nbsp;&nbsp;Self.cxGrid1)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;FileExt&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'.txt'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExportGrid4ToText(FileName,&nbsp;&nbsp;&nbsp;Self.cxGrid1)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;FileExt&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'.html'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExportGrid4ToHTML(FileName,&nbsp;&nbsp;&nbsp;Self.cxGrid1)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'不支持的导出文件类型...';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox(PChar(msg),&nbsp;&nbsp;&nbsp;PChar(Application.Title),&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_OK&nbsp;&nbsp;&nbsp;or&nbsp;&nbsp;&nbsp;MB_IconError);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'导出完成...';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox(PChar(msg),&nbsp;&nbsp;&nbsp;PChar(Application.Title),&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_OK&nbsp;&nbsp;&nbsp;or&nbsp;&nbsp;&nbsp;MB_IconInformation);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miPrintClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打印&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.dxComponentPrinter.Preview(True,&nbsp;&nbsp;&nbsp;Self.dxComponentPrinterLink1);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.cxGridPopupMenuPopup(ASenderMenu:&nbsp;&nbsp;&nbsp;TComponent;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AHitTest:&nbsp;&nbsp;&nbsp;TcxCustomGridHitTest;&nbsp;&nbsp;&nbsp;X,&nbsp;&nbsp;&nbsp;Y:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AllowPopup:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;GetHitTypeByHitCode(AHitTest.HitTestCode)&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;gvhtColumnHeader&nbsp;&nbsp;&nbsp;then&nbsp;//右击列标题时&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;&nbsp;&nbsp;tvResult.DataController.Groups.GroupingItemCount&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;tvResult.GroupedColumnCount&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;//有分组时显示&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miLineForGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miLineForGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miFilterBuilderClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//过滤管理器&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//弹出Filter&nbsp;&nbsp;&nbsp;Builder&nbsp;&nbsp;&nbsp;Dialog对话框&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.Filtering.RunCustomizeDialog;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miCustomFilterClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AHitTest:&nbsp;&nbsp;&nbsp;TcxCustomGridHitTest;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自定义过滤&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//弹出Custom&nbsp;&nbsp;&nbsp;Filter&nbsp;&nbsp;&nbsp;Dialog对话框&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AHitTest&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxGridPopupMenu.HitTest;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;GetHitTypeByHitCode(AHitTest.HitTestCode)&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;gvhtColumnHeader&nbsp;&nbsp;&nbsp;then&nbsp;//获得右击的列&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miFilterPanelClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi:&nbsp;&nbsp;&nbsp;TMenuItem;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//隐藏/显示过滤面板&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TMenuItem(Sender);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi.Checked&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;mi.Name&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'miFilterPanelAlways'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.Filtering.Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;fvAlways&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;mi.Name&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'miFilterPanelNerver'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.Filtering.Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;fvNever&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.Filtering.Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;fvNonEmpty;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miExpandAllGroupClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//展开所有组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.DataController.Groups.FullExpand;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormItemList.miCollapseAllGroupClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//收缩所有组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tvResult.DataController.Groups.FullCollapse;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>在用,留名<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>技巧三&nbsp;&nbsp;&nbsp;按条件计算合计值&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在Footer的第一列显示[合计:]&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;加一个Summary项,Column设为Grid的第一列,Kind设为skNone&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在该Summary项的OnGetText事件中,输入:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sender:&nbsp;&nbsp;&nbsp;TcxDataSummaryItem;&nbsp;&nbsp;&nbsp;const&nbsp;&nbsp;&nbsp;AValue:&nbsp;&nbsp;&nbsp;Variant;&nbsp;&nbsp;&nbsp;AIsFooter:&nbsp;&nbsp;&nbsp;Boolean;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AText:&nbsp;&nbsp;&nbsp;String);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AText&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'合计:';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;按条件汇总:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在TableView的DataController-&gt;Summary-&gt;FooterSummary-&gt;OnSummary事件中,输入:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASender:&nbsp;&nbsp;&nbsp;TcxDataSummaryItems;&nbsp;&nbsp;&nbsp;Arguments:&nbsp;&nbsp;&nbsp;TcxSummaryEventArguments;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;OutArguments:&nbsp;&nbsp;&nbsp;TcxSummaryEventOutArguments);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到字段名&nbsp;&nbsp;&nbsp;TcxDBDataSummaryItem(Arguments.SummaryItem).FieldName;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;(ASender.DataController.Values[Arguments.RecordIndex,&nbsp;&nbsp;&nbsp;tvExpenseLevel.Index]&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//只统计Level列=1的值&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;(TcxDBDataSummaryItem(Arguments.SummaryItem).Kind&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;skSum)&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutArguments.Value&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0;&nbsp;//Level&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;1的统计值设为0&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>借贵地一用,问个CXGrid问题,在cxgrid中如何使一些行不能编辑,如:字段isenable&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;false的行<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>楼上的问题&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;请参考下面的技巧&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;技巧四:根据某列的值设定其它列的可编辑性&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TFormUser.tvUserEditing(Sender:&nbsp;&nbsp;&nbsp;TcxCustomGridTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AItem:&nbsp;&nbsp;&nbsp;TcxCustomGridTableItem;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AAllow:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果第三列值为True,则第4列不能修改&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;(tvUser.Controller.FocusedRecord.Values[2]&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;True)&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;(AItem.Index&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;4)&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAllow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAllow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>技巧五:保存/恢复Grid布局&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;//恢复布局&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;IniFileName&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ExtractFilePath(Application.ExeName)&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;'Layout/'&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;Self.Name&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;'.ini';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;FileExists(IniFileName)&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvResult.RestoreFromIniFile(IniFileName)&nbsp;//从布局文件中恢复&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvResult.BeginUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;i&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;Self.tvResult.ItemCount&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvResult.Items.ApplyBestFit;&nbsp;//调整为最佳宽度&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Self.tvResult.EndUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;//保存布局&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;IniFileName&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ExtractFilePath(Application.ExeName)&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;'Layout/'&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;Self.Name&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;'.ini';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;&nbsp;DirectoryExists(ExtractFileDir(IniFileName))&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDir(ExtractFileDir(IniFileName));&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;Self.tvResult.StoreToIniFile(IniFileName);&nbsp;//保存为布局文件&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>借用地问一下:在&nbsp;&nbsp;&nbsp;cxgrid中,如果我同时选中主表与子表中的记录,怎么样能同时进行对其所选记录进行处理呢。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;我现在只能判断&nbsp;&nbsp;&nbsp;焦点是在主表还是从表中,然后只能对主表或子表中的数据进行处理。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>看来用cxGrid人不多啊&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;再多贴一些技巧,需要的朋友顶一下&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在主从TableView中根据主TableView得到对应的从TableView&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADetailDC:&nbsp;&nbsp;&nbsp;TcxGridDataController;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AView:&nbsp;&nbsp;&nbsp;TcxCustomGridTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1.DataController&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADetailDC&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridDataController(GetDetailDataController(FocusedRecordIndex,&nbsp;&nbsp;&nbsp;0));&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ADetailDC.GridView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;定位在第一行并显示内置编辑器&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;cxDBVerticalGrid1.FocusedRow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxDBVerticalGrid1.Rows[0];&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;cxDBVerticalGrid1.ShowEdit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;隐藏&nbsp;&nbsp;&nbsp;&quot;&lt;No&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;display&gt;&quot;&nbsp;&nbsp;&nbsp;字符串&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;来隐藏该文本。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;cxClasses,&nbsp;&nbsp;&nbsp;cxGridStrs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxSetResourceString(@scxGridNoDataInfoText,&nbsp;&nbsp;&nbsp;'');&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果&quot;&lt;No&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;display&gt;&quot;&nbsp;&nbsp;&nbsp;字符串已经显示,需要调用:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;View&gt;.LayoutChanged;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;删除应用过滤后的行&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;&lt;GridView&gt;&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;ViewData.RecordCount&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ViewData.Records[0].Focused&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController.DataSet.Delete;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=============================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;根据单元的值设置样式&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;&lt;aForm&gt;.&lt;aColumn&gt;StylesGetContentStyle(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sender:&nbsp;&nbsp;&nbsp;TcxCustomGridTableView;&nbsp;&nbsp;&nbsp;ARecord:&nbsp;&nbsp;&nbsp;TcxCustomGridRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AItem:&nbsp;&nbsp;&nbsp;TcxCustomGridTableItem;&nbsp;&nbsp;&nbsp;out&nbsp;&nbsp;&nbsp;AStyle:&nbsp;&nbsp;&nbsp;TcxStyle);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ARecord.Values[AItem.Index]&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;aSomeValue&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AStyle&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;&lt;aSomeStyle&gt;;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;&lt;aForm&gt;.&lt;aView&gt;StylesGetContentStyle(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sender:&nbsp;&nbsp;&nbsp;TcxCustomGridTableView;&nbsp;&nbsp;&nbsp;ARecord:&nbsp;&nbsp;&nbsp;TcxCustomGridRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AItem:&nbsp;&nbsp;&nbsp;TcxCustomGridTableItem;&nbsp;&nbsp;&nbsp;out&nbsp;&nbsp;&nbsp;AStyle:&nbsp;&nbsp;&nbsp;TcxStyle);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AColumn:&nbsp;&nbsp;&nbsp;TcxCustomGridTableItem;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AColumn&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;(Sender&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableView).GetColumnByFieldName('Email');&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;VarToStr(ARecord.Values[AColumn.Index])&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;''&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AStyle&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxStyleNullEmail;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;TcxCustomGridTableView.FindItemByName,&nbsp;&nbsp;&nbsp;TcxGridDBTableView.GetColumnByFieldName&nbsp;&nbsp;&nbsp;or&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;TcxGridDBDataController.GetItemByFieldName&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;cxGrid1DBBandedTableView1.DataController&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AValue&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Values[FocusedRecordIndex,&nbsp;&nbsp;&nbsp;GetItemByFieldName('SomeFieldName').Index];&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;动态生成BandedView&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AView:&nbsp;&nbsp;&nbsp;TcxCustomGridView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;&lt;cxGrid&gt;.CreateView(TcxGridDBBandedTableView);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridDBBandedTableView(AView).DataController.DataSource&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;&lt;DataSource&gt;;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridDBBandedTableView(AView).Bands.Add;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;TcxGridDBBandedTableView(AView).Bands.Add&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FixedKind&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;fkLeft;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridDBBandedTableView(AView).DataController.CreateAllItems;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cxGridLevel&gt;.GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;AView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>======================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;当底层数据集为空时显示一条空记录&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;&lt;Form&gt;.&lt;cxGrid&gt;Enter(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View:&nbsp;&nbsp;&nbsp;TcxGridDBTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridDBTableView((Sender&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGrid).FocusedView);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;View.DataController.DataSet.IsEmpty&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.DataSet.Append;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.Controller.EditingController.ShowEdit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=======================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在当前View插入记录&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;使用FocusedView属性得到当前焦点View,用View.DataController得到对应的Data&nbsp;&nbsp;&nbsp;Controller,&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;之后使用Data&nbsp;&nbsp;&nbsp;Controller的方法来操作数据:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;Append&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;Insert&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;Post&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;Cancel&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;DeleteFocused&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;DeleteSelection&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;示例:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARecIndex:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;…&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.Append;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARecIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController.FocusedRecordIndex;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.Values[ARecIndex,&nbsp;&nbsp;&nbsp;SomeItemIndex]&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;SomeValue;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.Post;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;另外一种方法是使用View.DataController.DataSource.DataSet得到底层数据集后,再用数据集的&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;方法来操作数据。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;激活内置编辑控件&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;1)&nbsp;&nbsp;&nbsp;&lt;aView&gt;.Controller.EditingController.ShowEdit(&lt;aColumn&gt;);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;2)&nbsp;&nbsp;&nbsp;&lt;aView&gt;.Controller.EditingController.StartEditShowingTimer(&lt;aColumn&gt;);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;3)&nbsp;&nbsp;&nbsp;&lt;aView&gt;.Controller.EditingItem&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;&lt;aColumn&gt;;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;4)&nbsp;&nbsp;&nbsp;&lt;aColumn&gt;.Editing&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;隐藏内置编辑控件&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;aView&gt;.Controller.EditingController.HideEdit(True);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;移除一个分组列&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;aColumn&gt;.GroupIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;-1;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;aColumn&gt;.Visible&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;保存修改到数据库&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;&lt;aForm&gt;.FormClose(Sender:&nbsp;&nbsp;&nbsp;TObject;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;Action:&nbsp;&nbsp;&nbsp;TCloseAction);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;(&lt;aGrid&gt;.FocusedView&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;nil)&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;(&lt;aGrid&gt;.FocusedView.DataController.EditState&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;[])&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;aGrid&gt;.FocusedView.DataController.Post;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;设置内置右键菜单&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;内置右键菜单包括二个菜单:cxGridStdHeaderMenu,&nbsp;&nbsp;&nbsp;TcxGridStdFooterMenu&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;cxGridStdPopupMenu;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.cxGridPopupMenu1Popup(ASenderMenu:&nbsp;&nbsp;&nbsp;TComponent;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AHitTest:&nbsp;&nbsp;&nbsp;TcxCustomGridHitTest;&nbsp;&nbsp;&nbsp;X,&nbsp;&nbsp;&nbsp;Y:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AllowPopup:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ASenderMenu&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;TcxGridStdHeaderMenu&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridStdHeaderMenu(ASenderMenu).OnPopup&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;StdHeaderMenuPopup;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.StdHeaderMenuPopup(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;TcxGridStdHeaderMenu(Sender).Items&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Items.Caption&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'Group&nbsp;&nbsp;&nbsp;By&nbsp;&nbsp;&nbsp;Box'&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Items.Enabled&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Break;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;得到选中记录的值&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;1)&nbsp;&nbsp;&nbsp;View.DataController.DataModeController.GridMode&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;False时&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecIdx&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.Controller.SelectedRecords.RecordIndex;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColIdx&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController.GetItemByFieldName(AFieldName).Index;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputVal&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController.Values[RecIdx,&nbsp;&nbsp;&nbsp;ColIdx];&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RecID&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController.GetRecordId(RecIdx);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OutputVal&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ADataSet.Lookup(View.DataController.KeyFieldNames,&nbsp;&nbsp;&nbsp;RecID,&nbsp;&nbsp;&nbsp;AFieldName);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;2)&nbsp;&nbsp;&nbsp;View.DataController.DataModeController.GridMode&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;True时&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bkm&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController.GetSelectedBookmark(ASelectedRecordIndex);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ADataSet.BookmarkValid(TBookmark(Bkm))&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADataSet.Bookmark&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TBookmark(Bkm);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputVal&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ADataSet.FieldByName(AFieldName).Value;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.BeginUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.BeginLocate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;make&nbsp;&nbsp;&nbsp;changes&nbsp;&nbsp;&nbsp;here…&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.EndLocate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.EndUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=============================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;在GridMode禁用内置的右键Footer菜单&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;cxGridStdPopupMenu;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;cxGridPopupMenuOnPopup(...)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;(ASenderMenu&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;TcxGridStdFooterMenu)&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;GridView&gt;.DataController.DataModeController.GridMode&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllowPopup&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;主从表任何时候只能展开一个组&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.ADetailDataControllerCollapsing(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADataController:&nbsp;&nbsp;&nbsp;TcxCustomDataController;&nbsp;&nbsp;&nbsp;ARecordIndex:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AAllow:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAllow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;False;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;ADataController.RecordCount&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ADataController.GetDetailExpanding(I)&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(C);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;C&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAllow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.ADetailDataControllerExpanding(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADataController:&nbsp;&nbsp;&nbsp;TcxCustomDataController;&nbsp;&nbsp;&nbsp;ARecordIndex:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;AAllow:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADataController.CollapseDetails;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.FormCreate(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1.DataController.OnDetailExpanding&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ADetailDataControllerExpanding;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1.DataController.OnDetailCollapsing&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ADetailDataControllerCollapsing;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;动态创建层次(Level)和视图(View)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grid:&nbsp;&nbsp;&nbsp;TcxGrid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level:&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View:&nbsp;&nbsp;&nbsp;TcxGridDBTableView;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Creates&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;Grid&nbsp;&nbsp;&nbsp;instance&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grid&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGrid.Create(SomeOwner);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grid.Parent&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;SomeParent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Creates&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;Level&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Grid.Levels.Add;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'SomeLevelName';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Creates&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;View&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Grid.CreateView(TcxGridDBTableView)&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableView;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.Name&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'SomeViewName';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;…&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;binds&nbsp;&nbsp;&nbsp;it&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;Level&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Level.GridView&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Hooks&nbsp;&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;View&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.DataSource&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;SomeDataSource;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;…&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;creates&nbsp;&nbsp;&nbsp;all&nbsp;&nbsp;&nbsp;columns&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.DataController.CreateAllItems;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><br>此楼回复Re:&nbsp;&nbsp;<br>--------------------------------------------------------------------------------<br><br>======================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;获得Group&nbsp;&nbsp;&nbsp;Footer合计行对应的记录&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.cxGrid1DBTableView1CustomDrawFooterCell(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sender:&nbsp;&nbsp;&nbsp;TcxGridTableView;&nbsp;&nbsp;&nbsp;ACanvas:&nbsp;&nbsp;&nbsp;TcxCanvas;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AViewInfo:&nbsp;&nbsp;&nbsp;TcxGridColumnHeaderViewInfo;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;ADone:&nbsp;&nbsp;&nbsp;Boolean);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALevel,&nbsp;&nbsp;&nbsp;ADataGroupIndex:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGridRecord,&nbsp;&nbsp;&nbsp;AGroupRecord:&nbsp;&nbsp;&nbsp;TcxCustomGridRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;AViewInfo&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;TcxGridRowFooterCellViewInfo&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Row&nbsp;&nbsp;&nbsp;footer&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(TcxGridDBColumn(AViewInfo.Column).DataBinding.FieldName&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;'Area')&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Area&nbsp;&nbsp;&nbsp;column&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGridRecord&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridRowFooterCellViewInfo(AViewInfo).GridRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALevel&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TcxGridRowFooterCellViewInfo(AViewInfo).Container.GroupLevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADataGroupIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Sender.DataController.Groups.DataGroupIndexByRowIndex[AGridRecord.Index];&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ADataGroupIndex&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGroupRecord&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;AGridRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;&nbsp;&nbsp;AGroupRecord.Level&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;ALevel&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGroupRecord&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;AGroupRecord.ParentRecord;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AViewInfo.Text&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;AGroupRecord.DisplayTexts[0];&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===========================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;访问过滤之后的记录&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Clear;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1.DataController&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;FilteredRecordCount&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(DisplayTexts[FilteredRecordIndex,&nbsp;&nbsp;&nbsp;0]);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;获得单元的Font&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;cxGrid1DBTableView1.ViewInfo.RecordsViewInfo.Items[1].GetCellViewInfoByItem(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1Company).EditViewInfo.Font;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;根据Level名称找到Level对象&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;function&nbsp;&nbsp;&nbsp;GetLevelByName(AGrid:&nbsp;&nbsp;&nbsp;TcxGrid;&nbsp;&nbsp;&nbsp;ALevelName:&nbsp;&nbsp;&nbsp;string):&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;&nbsp;LoopThroughLevels(ALevel:&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;ALevelName:&nbsp;&nbsp;&nbsp;string):&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;nil;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;ALevel.Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ALevel.Name&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;ALevelName&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;ALevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;ALevel.Count&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;LoopThroughLevels(ALevel,&nbsp;&nbsp;&nbsp;ALevelName);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;nil&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;nil;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;AGrid.Levels.Count&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;AGrid.Levels.Name&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;ALevelName&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;AGrid.Levels;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;AGrid.Levels.Count&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;LoopThroughLevels(AGrid.Levels,&nbsp;&nbsp;&nbsp;ALevelName);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;nil&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;指定Filter&nbsp;&nbsp;&nbsp;Builder打开/保存过滤文件的默认路径&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...,&nbsp;&nbsp;&nbsp;cxFilterControlDialog;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm.GridView1FilterControlDialogShow(&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TfmFilterControlDialog(Sender).OpenDialog.InitialDir&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'D:/'&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;保存/恢复带汇总行的布局&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;TableView&gt;.StoreToIniFile('c:/Grid.ini',&nbsp;&nbsp;&nbsp;True,&nbsp;&nbsp;&nbsp;[gsoUseSummary]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;GridView&gt;.RestoreFromIniFile(&lt;inifilename&gt;,True,False&nbsp;&nbsp;&nbsp;{or&nbsp;&nbsp;&nbsp;True,&nbsp;&nbsp;&nbsp;optional},[gsoUseSummary]);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;取消过滤时移到第一行&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxCustomData;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TYour_Form.AViewDataControllerFilterChanged(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filter:&nbsp;&nbsp;&nbsp;TcxDataFilterCriteria;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;Sender&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxDataFilterCriteria&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;&nbsp;IsEmpty&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController.FocusedRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;排序后移到第一行&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;可以设置DataController.Options.FocusTopRowAfterSorting&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;True,也可以使用如下的代码:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;uses&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxCustomData;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TYour_Form.Your_ViewDataControllerSortingChanged(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxCustomDataController(Sender).FocusedRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;0;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;判断当前行是否第一行或最后一行&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;可以使用DataController的IsBOF,&nbsp;&nbsp;&nbsp;IsEOF方法,或者:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;AView&gt;.Controller.Controller.FocusedRow.IsFirst&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;AView&gt;.Controller.Controller.FocusedRow.IsLast&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;==============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;根据指定值查找记录&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;DataController提供了好几个方法来得到指定值对应的RecordIndex&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;对于Bound&nbsp;&nbsp;&nbsp;View可以使用FindRecordIndexByKeyValue方法&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;编辑和显示Blob字段&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;该字段的Properties设置为BlobEdit,并将BlobPaintStyle&nbsp;&nbsp;&nbsp;属性设为&nbsp;&nbsp;&nbsp;bpsText&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;得到可见行数&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&lt;View&gt;.ViewInfo.VisibleRecordCount&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;===============================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;保存后的行设置为当前行&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;const&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CM_SETFOCUSEDRECORD&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;WM_USER&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;1002;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;type&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TForm1&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;class(TForm)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1:&nbsp;&nbsp;&nbsp;TcxGridDBTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1Level1:&nbsp;&nbsp;&nbsp;TcxGridLevel;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1:&nbsp;&nbsp;&nbsp;TcxGrid;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dxMemData1:&nbsp;&nbsp;&nbsp;TdxMemData;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dxMemData1Field1:&nbsp;&nbsp;&nbsp;TStringField;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dxMemData1Field2:&nbsp;&nbsp;&nbsp;TIntegerField;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource1:&nbsp;&nbsp;&nbsp;TDataSource;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1RecId:&nbsp;&nbsp;&nbsp;TcxGridDBColumn;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1Field1:&nbsp;&nbsp;&nbsp;TcxGridDBColumn;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1Field2:&nbsp;&nbsp;&nbsp;TcxGridDBColumn;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer1:&nbsp;&nbsp;&nbsp;TTimer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckBox1:&nbsp;&nbsp;&nbsp;TCheckBox;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;Timer1Timer(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;dxMemData1AfterPost(DataSet:&nbsp;&nbsp;&nbsp;TDataSet);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;CheckBox1Click(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;CMSetFocusedRecord(var&nbsp;&nbsp;&nbsp;Msg:&nbsp;&nbsp;&nbsp;TMessage);&nbsp;&nbsp;&nbsp;message&nbsp;&nbsp;&nbsp;CM_SETFOCUSEDRECORD;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;Public&nbsp;&nbsp;&nbsp;declarations&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form1:&nbsp;&nbsp;&nbsp;TForm1;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FocusedIdx:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;implementation&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;{$R&nbsp;&nbsp;&nbsp;*.dfm}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.Timer1Timer(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dxMemData1.AppendRecord(['',&nbsp;&nbsp;&nbsp;IntToStr(Random(1000)),&nbsp;&nbsp;&nbsp;Random(1000)]);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.dxMemData1AfterPost(DataSet:&nbsp;&nbsp;&nbsp;TDataSet);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(Handle,&nbsp;&nbsp;&nbsp;CM_SETFOCUSEDRECORD,&nbsp;&nbsp;&nbsp;Integer(cxGrid1DBTableView1),&nbsp;&nbsp;&nbsp;MakeLParam(cxGrid1DBTableView1.Controller.FocusedRowIndex,&nbsp;&nbsp;&nbsp;cxGrid1DBTableView1.Controller.TopRowIndex));&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.CMSetFocusedRecord(var&nbsp;&nbsp;&nbsp;Msg:&nbsp;&nbsp;&nbsp;TMessage);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridDBTableView(msg.WParam).Controller.FocusedRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Msg.LParamLo;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridDBTableView(msg.WParam).Controller.TopRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;Msg.LParamHi;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.CheckBox1Click(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer1.Enabled&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TCheckBox(Sender).Checked;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end.&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;=================================================================================&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;删除记录并获得焦点&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;procedure&nbsp;&nbsp;&nbsp;TForm1.BtnDeleteClick(Sender:&nbsp;&nbsp;&nbsp;TObject);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FocusedRow,&nbsp;&nbsp;&nbsp;TopRow:&nbsp;&nbsp;&nbsp;Integer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View:&nbsp;&nbsp;&nbsp;TcxGridTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController:&nbsp;&nbsp;&nbsp;TcxGridDataController;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;cxGrid1.FocusedView&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridTableView;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.DataController;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Remember&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;top&nbsp;&nbsp;&nbsp;row&nbsp;&nbsp;&nbsp;(the&nbsp;&nbsp;&nbsp;vertical&nbsp;&nbsp;&nbsp;scrollbar&nbsp;&nbsp;&nbsp;position)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TopRow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;View.Controller.TopRowIndex;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Remember&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;focused&nbsp;&nbsp;&nbsp;row(!)&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FocusedRow&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;DataController.FocusedRowIndex;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController.DeleteFocused;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;After&nbsp;&nbsp;&nbsp;deletion&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;same&nbsp;&nbsp;&nbsp;row&nbsp;&nbsp;&nbsp;must&nbsp;&nbsp;&nbsp;be&nbsp;&nbsp;&nbsp;focused,&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;although&nbsp;&nbsp;&nbsp;it&nbsp;&nbsp;&nbsp;will&nbsp;&nbsp;&nbsp;correspond&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;different&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;record&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataController.FocusedRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;FocusedRow;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;Restore&nbsp;&nbsp;&nbsp;the&nbsp;&nbsp;&nbsp;top&nbsp;&nbsp;&nbsp;row&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View.Controller.TopRowIndex&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;TopRow;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br><br>//=======================================================================================<br>数据库中的财务表为:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;收支类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;金额&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其它属性&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;其中收支类型只有两种值:0&nbsp;&nbsp;&nbsp;表示收入,1&nbsp;&nbsp;&nbsp;表示支出&nbsp;&nbsp;&nbsp;;金额都是正数。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;设置cxGrid的Footer&nbsp;&nbsp;&nbsp;可以使得在显示时,列表的下方出现汇总行:“金额”的和&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;同样设置Default&nbsp;&nbsp;&nbsp;For&nbsp;&nbsp;&nbsp;Groups可以使得在用户拖动表头属性实现分组时,显示组内的汇总行:“金额”的和。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;上面说的,用过cxGrid应该都会,下面就有这么一个问题&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;如果我想使汇总行的值变为如下的值应该怎样实现:&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;收支类型为0的金额的和&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;收支类型为1的金额的和&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;实现Footer的功能好办,因为它的值不会变,自己用循环写一个就完了,但是Default&nbsp;&nbsp;&nbsp;For&nbsp;&nbsp;&nbsp;Groups的功能就不好说了,因为它的值是根据用户拖动的属性计算的,而且还有可能是多层分组,想不出来了,所有到这来问&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;是不是要设置什么属性?或者cxGrid根本就没这个功能,那该用什么方法解决?希望哪位帮我解决,谢谢了先!&nbsp;&nbsp;&nbsp;<br><br>给你一个例子,可能对你有帮助,&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;tvOrders.DataController.Summary&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeginUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SummaryGroups.Clear;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//The&nbsp;&nbsp;&nbsp;first&nbsp;&nbsp;&nbsp;summary&nbsp;&nbsp;&nbsp;group&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryGroups.Add&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Add&nbsp;&nbsp;&nbsp;proposed&nbsp;&nbsp;&nbsp;grouping&nbsp;&nbsp;&nbsp;column(s)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridTableSummaryGroupItemLink(Links.Add).Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersCustomerID;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Add&nbsp;&nbsp;&nbsp;summary&nbsp;&nbsp;&nbsp;items&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryItems.Add&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableSummaryItem&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersPaymentAmount;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kind&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;skSum;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Format&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'Amount&nbsp;&nbsp;&nbsp;Paid:&nbsp;&nbsp;&nbsp;$,0';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryItems.Add&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableSummaryItem&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersPaymentAmount;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kind&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;skCount;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Format&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'Records:&nbsp;&nbsp;&nbsp;0';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//The&nbsp;&nbsp;&nbsp;second&nbsp;&nbsp;&nbsp;summary&nbsp;&nbsp;&nbsp;group&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryGroups.Add&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Add&nbsp;&nbsp;&nbsp;proposed&nbsp;&nbsp;&nbsp;grouping&nbsp;&nbsp;&nbsp;column(s)&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcxGridTableSummaryGroupItemLink(Links.Add).Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersProductID;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Add&nbsp;&nbsp;&nbsp;summary&nbsp;&nbsp;&nbsp;items&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryItems.Add&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableSummaryItem&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersQuantity;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kind&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;skSum;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;spFooter;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Format&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;'TOTAL&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0';&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;&nbsp;SummaryItems.Add&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;TcxGridDBTableSummaryItem&nbsp;&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;tvOrdersPurchaseDate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kind&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;skMin;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;&nbsp;spFooter;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndUpdate;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
 

Similar threads

回复
0
查看
567
不得闲
D
回复
0
查看
926
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
后退
顶部