17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | --------------------------------- | 字段1 | 字段2 | 字段3 | 字段4 | | 字段5 | 字段6 | | 字段7 | 字段8 | 字段9 | 实现这个很简单,你可以直接在上面拖动字段名,拖动时会显示箭头的,放入你想显示的位置就OK了。或者在鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout里也可以拖放。

但是cxGrid不能实现如下的多表头形式: --------------------------------- | 说明1 | 说明2 | --------------------------------- | 说明3 | 说明4 | 说明5 | 说明6 | | 字段1 | 字段2 | | 字段3 | 字段4 | 字段5 | 不知道有谁能实现这样的多表头?

**************************************************************************** 18. 在主从表结构时,当点开“+”时怎样将焦点聚在相应主表的记录上? 解决: var HitTest: TcxCustomGridHitTest;

procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Note that the Sender parameter is a Site HitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y); // The point belongs to the [+]/[-] button area if HitTest is TcxGridExpandButtonHitTest then // Move focus to the record TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := True; end;

**************************************************************************** 19 CXGrid4如何展开全部节点 解决:GridDBTableView1.DataController.Groups.FullExpand;

**************************************************************************** 20. cxGrid如何动态创建Items的Editor的项? 解决:cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为 combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入) var A:TDataSource: B:TcxlookupcomboboxProperties; begin A:=TDataSource.create(self); B:=tcxlookupcomboboxproperties.create(self); A.Dataset:=Dic_ry_xb;//此处指定数据源。 b.listdource:=a;//此处指明字段的listsource属性。 b.keyfieldnames:='a'; //此处指明字段的关键字段 b.listfieldnames:='b'; //此处指明字段的返回值。 b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。 cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。 end; //这个是初始化的代码

**************************************************************************** 21. 拷贝文件时有进度显示 解决: procedure TForm1.mycopyfile(sourcef,targetf:string); var FromF, ToF: file; NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; n:integer; begin    AssignFile(FromF, sourcef);    Reset(FromF, 1); { Record size = 1 }    AssignFile(ToF,targetf); { Open output file }    Rewrite(ToF, 1); { Record size = 1 }    n:=0;    repeat         BlockRead(FromF, Buf, SizeOf(Buf), NumRead);         form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';         application.ProcessMessages;         //显示进度         BlockWrite(ToF, Buf, NumRead, NumWritten);         inc(n);     until (NumRead = 0) or (NumWritten <> NumRead);     form1.Label1.Caption:='100%';     CloseFile(FromF);     CloseFile(ToF); end; procedure TForm1.Button1Click(Sender: TObject); begin mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip'); end; **************************************************************************** 22. cxGrid 设置斑马线 解决: 在TcxGridDBBandedTableView.Styles属性中有 ContentEven(奇数行风格) ContentOdd (偶数行风格) ,设定一下风格就好了。 **************************************************************************** 23根据记录内容更改字体颜色 解决: 参考范例CustomDrawTableViewDemo, 主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中实现。 如下代码:

if   (Pos('-',AViewInfo.GridRecord.DisplayTexts[colOrderProductCount.Index]) > 0) then begin //标识负数记录     //ACanvas.Canvas.Brush.Color:= clMoneyGreen;     ACanvas.Canvas.Font.Color:= clRed;//clActiveCaption end;

其中colOrderProductCount是“产品订数”列。

还要有一步就是要刷新显示

TcxGridDBBandedTableView.LayoutChanged(); //tvCars.LayoutChanged(False); TcxGridDBBandedTableView.Painter.Invalidate;

**************************************************************************** 24用代码展开/收缩主从结构 解决:       Self.tvDepartment.ViewData.Expand(True);          Self.tvDepartment.ViewData.Collaspe(True);    注:tvDepartment为主表对应的TableView

**************************************************************************** 25在内置右键菜单的后面增加菜单项 解决: 首先应在Form上加一个cxGridPopupMenu控件   以启用右键菜单    UseBuildInPopupMenus设为True         procedure   TFormItemList.FormCreate(Sender:   TObject);    var          AMenu:   TComponent;          FMenuItem,   FSubMenuItem:   TMenuItem;    begin          AMenu   :=   nil;          if   cxGridPopupMenu.BuiltInPopupMenus.Count   =   0   then              Exit;          AMenu   :=   cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; //第一个内置右键菜单(表头菜单)          if   Assigned(AMenu)   and   AMenu.InheritsFrom(TPopupMenu)   then          begin              TPopupMenu(AMenu).AutoHotkeys   :=   maManual;         //手动热键                   //-------------------------              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Caption   :=   '-';              FMenuItem.Name   :=   'miLineForGroup';              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //展开所有组              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miExpandAllGroup';              FMenuItem.Caption   :=   '展开所有组(&X)';              FMenuItem.OnClick   :=   miExpandAllGroupClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //收缩所有组              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miCollapseAllGroup';              FMenuItem.Caption   :=   '收缩所有组(&O)';              FMenuItem.OnClick   :=   miCollapseAllGroupClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //-------------------------              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Caption   :=   '-';              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //过滤面板              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miFilterPanel';              FMenuItem.Caption   :=   '过滤面板(&P)';              //自动显示              FSubMenuItem   :=   TMenuItem.Create(Self);              FSubMenuItem.Name   :=   'miFilterPanelAuto';              FSubMenuItem.Caption   :=   '自动(&A)';              FSubMenuItem.RadioItem   :=   True;              FSubMenuItem.GroupIndex   :=   5; //指定同一组              FSubMenuItem.Checked   :=   True;              FSubMenuItem.OnClick   :=   miFilterPanelClick;              FMenuItem.Add(FSubMenuItem); //加入二级子菜单              //总是显示              FSubMenuItem   :=   TMenuItem.Create(Self);              FSubMenuItem.Name   :=   'miFilterPanelAlways';              FSubMenuItem.Caption   :=   '总是显示(&W)';              FSubMenuItem.RadioItem   :=   True;              FSubMenuItem.GroupIndex   :=   5;              FSubMenuItem.OnClick   :=   miFilterPanelClick;              FMenuItem.Add(FSubMenuItem);              //从不显示              FSubMenuItem   :=   TMenuItem.Create(Self);              FSubMenuItem.Name   :=   'miFilterPanelNerver';              FSubMenuItem.Caption   :=   '从不显示(&N)';              FSubMenuItem.RadioItem   :=   True;              FSubMenuItem.GroupIndex   :=   5;              FSubMenuItem.OnClick   :=   miFilterPanelClick;              FMenuItem.Add(FSubMenuItem);              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //自定义过滤              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miCustomFilter';              FMenuItem.Caption   :=   '自定义过滤(&M)';              FMenuItem.OnClick   :=   miCustomFilterClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //过滤管理器              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miFilterBuilder';              TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   44); //添加图标图像              FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1; //指定图标序号              FMenuItem.Caption   :=   '过滤管理器';              FMenuItem.OnClick   :=   Self.miFilterBuilderClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //---------------------              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Caption   :=   '-';              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //导出              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miExport';              TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   37);              FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1;              FMenuItem.Caption   :=   '导出(&E)';              FMenuItem.OnClick   :=   Self.miExportClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);                   //打印              FMenuItem   :=   TMenuItem.Create(Self);              FMenuItem.Name   :=   'miPrint';              FMenuItem.Caption   :=   '打印(&P)';              TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   14);              FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1;              FMenuItem.OnClick   :=   Self.miPrintClick;              TPopupMenu(AMenu).Items.Add(FMenuItem);          end;    end;         procedure   TFormItemList.miExportClick(Sender:   TObject);    var          FileName,   FileExt,   msg:   String;    begin          if   Self.aqyQuery.IsEmpty   then          begin              msg   :=   '没有导出数据...';              Application.MessageBox(PChar(msg),   PChar(Application.Title),                  MB_OK   or   MB_IconWarning);              Exit;          end;               Self.SaveDialogExport.Filter   :=   'Excel文件   (*.xls)|*.xls|XML文件   (*.xml)|*.xml'              +   '|文本文件   (*.txt)|*.txt|网页文件   (*.html)|*.html';          Self.SaveDialogExport.Title   :=   '导出为';               if   not   Self.SaveDialogExport.Execute   then              Exit;               FileName   :=   Self.SaveDialogExport.FileName;          FileExt   :=   LowerCase(ExtractFileExt(FileName));          if   FileExt   =   '.xls'   then              ExportGrid4ToExcel(FileName,   Self.cxGrid1)          else   if   FileExt   =   '.xml'   then              ExportGrid4ToXML(FileName,   Self.cxGrid1)          else   if   FileExt   =   '.txt'   then              ExportGrid4ToText(FileName,   Self.cxGrid1)          else   if   FileExt   =   '.html'   then              ExportGrid4ToHTML(FileName,   Self.cxGrid1)          else          begin              msg   :=   '不支持的导出文件类型...';              Application.MessageBox(PChar(msg),   PChar(Application.Title),                  MB_OK   or   MB_IconError);              Exit;          end;               msg   :=   '导出完成...';          Application.MessageBox(PChar(msg),   PChar(Application.Title),              MB_OK   or   MB_IconInformation);    end;         procedure   TFormItemList.miPrintClick(Sender:   TObject);    begin          //打印          Self.dxComponentPrinter.Preview(True,   Self.dxComponentPrinterLink1);    end;         procedure   TFormItemList.cxGridPopupMenuPopup(ASenderMenu:   TComponent;          AHitTest:   TcxCustomGridHitTest;   X,   Y:   Integer;   var   AllowPopup:   Boolean);    begin          if   GetHitTypeByHitCode(AHitTest.HitTestCode)   =   gvhtColumnHeader   then //右击列标题时          begin              //if   tvResult.DataController.Groups.GroupingItemCount   >   0   then              if   tvResult.GroupedColumnCount   >   0   then //有分组时显示              begin                TMenuItem(Self.FindComponent('miLineForGroup')).Visible   :=   True;                TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible   :=   True;                TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible   :=   True;              end              else              begin                TMenuItem(Self.FindComponent('miLineForGroup')).Visible   :=   False;                TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible   :=   False;                TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible   :=   False;              end;          end;    end;         procedure   TFormItemList.miFilterBuilderClick(Sender:   TObject);    begin          //过滤管理器          //弹出Filter   Builder   Dialog对话框          tvResult.Filtering.RunCustomizeDialog;    end;         procedure   TFormItemList.miCustomFilterClick(Sender:   TObject);    var          AHitTest:   TcxCustomGridHitTest;    begin          //自定义过滤          //弹出Custom   Filter   Dialog对话框          AHitTest   :=   cxGridPopupMenu.HitTest;          if   GetHitTypeByHitCode(AHitTest.HitTestCode)   =   gvhtColumnHeader   then //获得右击的列              tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);    end;         procedure   TFormItemList.miFilterPanelClick(Sender:   TObject);    var          mi:   TMenuItem;    begin          //隐藏/显示过滤面板          mi   :=   TMenuItem(Sender);          mi.Checked   :=   True;          if   mi.Name   =   'miFilterPanelAlways'   then              tvResult.Filtering.Visible   :=   fvAlways          else   if   mi.Name   =   'miFilterPanelNerver'   then              tvResult.Filtering.Visible   :=   fvNever          else              tvResult.Filtering.Visible   :=   fvNonEmpty;    end;         procedure   TFormItemList.miExpandAllGroupClick(Sender:   TObject);    begin          //展开所有组          tvResult.DataController.Groups.FullExpand;    end;         procedure   TFormItemList.miCollapseAllGroupClick(Sender:   TObject);    begin          //收缩所有组          tvResult.DataController.Groups.FullCollapse;    end;

**************************************************************************** 26根据某列的值设定其它列的可编辑性 解决: procedure   TFormUser.tvUserEditing(Sender:   TcxCustomGridTableView;          AItem:   TcxCustomGridTableItem;   var   AAllow:   Boolean);    begin          //如果第三列值为True,则第4列不能修改          if   (tvUser.Controller.FocusedRecord.Values[2]   =   True)   and   (AItem.Index   =   4)   then              AAllow   :=   False          else              AAllow   :=   True;    end;

**************************************************************************** 27保存/恢复Grid布局 解决: 网格左上角的自定义布局按钮: TableView-OptionsCustiomizeColumnsQuickCustomization true; //恢复布局    IniFileName   :=   ExtractFilePath(Application.ExeName)   +   'Layout/'   +   Self.Name   +   '.ini';    if   FileExists(IniFileName)   then          Self.tvResult.RestoreFromIniFile(IniFileName) //从布局文件中恢复    else    begin          Self.tvResult.BeginUpdate;          for   i   :=   0   to   Self.tvResult.ItemCount   -   1   do              Self.tvResult.Items[i].ApplyBestFit; //调整为最佳宽度          Self.tvResult.EndUpdate;    end;         //保存布局    IniFileName   :=   ExtractFilePath(Application.ExeName)   +   'Layout/'   +   Self.Name   +   '.ini';    if   not   DirectoryExists(ExtractFileDir(IniFileName))   then          CreateDir(ExtractFileDir(IniFileName));    Self.tvResult.StoreToIniFile(IniFileName); //保存为布局文件

实例: IniFileName: string;

procedure TMainFM.FormCreate(Sender: TObject);     //窗体创建时读取布局 var i: Integer; begin    qyHed.Open;    IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';    if FileExists(IniFileName) then       Self.cxTbv.RestoreFromIniFile(IniFileName) //从布局文件中恢复    else    begin       Self.cxTbv.BeginUpdate;       for i := 0 to Self.cxTbv.ItemCount - 1 do          Self.cxTbv.Items[i].ApplyBestFit; //调整为最佳宽度       Self.cxTbv.EndUpdate;    end; end;

procedure TMainFM.NSaveGrdClick(Sender: TObject);      //保存布局文件 begin    try       IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';       if not DirectoryExists(ExtractFileDir(IniFileName)) then          CreateDir(ExtractFileDir(IniFileName));       Self.cxTbv.StoreToIniFile(IniFileName);    except    end; end;  ****************************************************************************

28保存/恢复带汇总行的布局 解决: <TableView>.StoreToIniFile('c:/Grid.ini',   True,   [gsoUseSummary]);      <GridView>.RestoreFromIniFile(<inifilename>,True,False{or True,optional},[gsoUseSummary]);

**************************************************************************** 29定位在第一行并显示内置编辑器 解决: cxDBVerticalGrid1.FocusedRow   :=   cxDBVerticalGrid1.Rows[0];    cxDBVerticalGrid1.ShowEdit;  **************************************************************************** 30隐藏   "<No   data   to   display>"   字符串  解决: 该文本存储在scxGridNoDataInfoText资源字符串,可以将该资源字符串的内容设为空    来隐藏该文本。         uses   cxClasses,   cxGridStrs;            ...          cxSetResourceString(@scxGridNoDataInfoText,   '');               //如果"<No   data   to   display>"   字符串已经显示,需要调用:          <View>.LayoutChanged; **************************************************************************** 31删除应用过滤后的行 解决: var          I:   Integer;    begin          with   <GridView>   do              for   I   :=   0   to   ViewData.RecordCount   -   1   do              begin                  ViewData.Records[0].Focused   :=   True;                  DataController.DataSet.Delete;              end; end; ****************************************************************************

cxGrid使用汇总2的更多相关文章

  1. cxGrid使用汇总(一)

    1. 去掉cxGrid中台头的Box 解决:在tableview1的ptionsview的groupbybox=false; 2.统计功能 解决:(1) tableview 1. tableview1 ...

  2. cxGrid使用汇总1

    这些都不是原创,只是平时收集到资料然后整理的,有些可能百度一下到处都是而且还大同小异也有些不是很好找,现在贴出来希望给那些用到cxGrid的人会有所帮助 1. 去掉cxGrid中台头的Box 解决:在 ...

  3. Delphi cxGrid使用汇总(一)

    1. 去掉cxGrid中台头的Box解决:在tableview1的ptionsview的groupbybox=false; 2.统计功能解决:(1) tableview1. tableview1的op ...

  4. cxGrid使用汇总4

    1.     CxGrid汇总功能 ① OptionsView-Footer设置为True,显示页脚   ② CxGrid的Summary选项卡定义要汇总的列和字段名及汇总方式,Footer选项卡定义 ...

  5. cxGrid使用汇总3

    32根据单元的值设置样式   解决:procedure   <aForm>.<aColumn>StylesGetContentStyle(         Sender:   ...

  6. cxGrid使用汇总

    1.自动行高:CellAutoHeight(单元自动高度)设置为True. procedure <AForm>.<AGridColumn>PropertiesValidate( ...

  7. 关于 cxGrid 的过滤问题

    http://bbs.csdn.net/topics/390536919 关于 cxGrid 的过滤问题 [问题点数:20分,结帖人zhengyc653]             不显示删除回复   ...

  8. Delphi CxGrid 汇总(4)

    1.     CxGrid汇总功能 ① OptionsView-Footer设置为True,显示页脚   ② CxGrid的Summary选项卡定义要汇总的列和字段名及汇总方式,Footer选项卡定义 ...

  9. Delphi CxGrid 汇总(2)

    17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | ------------ ...

随机推荐

  1. jdbc调用存储过程的方法

    ----------------------------jdbc调用存储过程的方法---------------------------------------------------private ...

  2. Makefile基础

    1.规则 规则定义格式如下 目标 : 条件1 条件2 ... 命令1 命令2 ... 隐含规则和模式规则(略) 2.变量 Makefile变量像C的宏定义一样,代表一串字符,在取值的地方展开. 1)两 ...

  3. GET与POST提交

    get是从服务器上获取数据,post是向服务器传送数据. get 是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,[在URL中可以看到].post是通过HTT ...

  4. HTML to DOM

    Although you can now natively parse HTML using DOMParser and XMLHttpRequest, this is a new feature t ...

  5. .NET两种常见上传下载文件方法

    1.FTP模式 代码如下: (1)浏览 /// <summary> /// 浏览文件 /// </summary> /// <param name="tbCon ...

  6. Chrysler -- CCD (Chrysler Collision Detection) Data Bus

    http://articles.mopar1973man.com/general-cummins/34-engine-system/81-ccd-data-bus CCD (Chrysler Coll ...

  7. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. boost 线程、互斥体、条件变量

    1.任何技术都是针对特定场景设计的,也就是说,为了解决某个问题而设计的. 2.考虑下面一种场景:一个小旅馆,只有一个卫生间,有清洁人员,店主人,和旅客.卫生间用完之后,就会自动锁闭,必须取钥匙,才能进 ...

  9. VS 统计代码行数

    使用正则表达式 :    ^:b*[^:b#/]+.*$ 简单说明如下: ^:行头 $:行尾 +:一个或多个 *:0个或多个 :b:表示空白,匹配空格或者制表符 # 表示后面是include,/表示注 ...

  10. LFS7.4编译笔记(3)

    在第一部分,我们编译了一个工具链及临时系统,然后在第二部分我们chroot到/mnt/lfs下面,利用临时系统的工具编译了我们最终的LFS系统.不过此时,我们的LFS系统还是不完整的,因为我们还没有安 ...