zoukankan      html  css  js  c++  java
  • Delphi CxGrid 汇总(2)

    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时由程序加入)

    [delphi] view plaincopy
    1. var  
    2. A:TDataSource:  
    3. B:TcxlookupcomboboxProperties;  
    4. begin  
    5. A:=TDataSource.create(self);  
    6. B:=tcxlookupcomboboxproperties.create(self);  
    7. A.Dataset:=Dic_ry_xb;//此处指定数据源。  
    8. b.listdource:=a;//此处指明字段的listsource属性。  
    9. b.keyfieldnames:='a'//此处指明字段的关键字段  
    10. b.listfieldnames:='b'//此处指明字段的返回值。  
    11. b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。  
    12. cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。  
    13. end//这个是初始化的代码  

    ****************************************************************************
    21. 拷贝文件时有进度显示
    解决:

    [delphi] view plaincopy
    1. procedure TForm1.mycopyfile(sourcef,targetf:string);  
    2. var  
    3. FromF, ToF: file;  
    4. NumRead, NumWritten: Integer;  
    5. Buf: array[1..2048of Char;  
    6. n:integer;  
    7. begin  
    8.    AssignFile(FromF, sourcef);  
    9.    Reset(FromF, 1); { Record size = 1 }  
    10.    AssignFile(ToF,targetf); { Open output file }  
    11.    Rewrite(ToF, 1); { Record size = 1 }  
    12.    n:=0;  
    13.    repeat  
    14.         BlockRead(FromF, Buf, SizeOf(Buf), NumRead);  
    15.         form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';  
    16.         application.ProcessMessages;  
    17.         //显示进度  
    18.         BlockWrite(ToF, Buf, NumRead, NumWritten);  
    19.         inc(n);  
    20.     until (NumRead = 0or (NumWritten <> NumRead);  
    21.     form1.Label1.Caption:='100%';  
    22.     CloseFile(FromF);  
    23.     CloseFile(ToF);  
    24. end;  
    25. procedure TForm1.Button1Click(Sender: TObject);  
    26. begin  
    27. mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip');  
    28. 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  

    [delphi] view plaincopy
    1.      
    2. procedure   TFormItemList.FormCreate(Sender:   TObject);    
    3. var    
    4.       AMenu:   TComponent;    
    5.       FMenuItem,   FSubMenuItem:   TMenuItem;    
    6. begin    
    7.       AMenu   :=   nil;    
    8.       if   cxGridPopupMenu.BuiltInPopupMenus.Count   =   0   then    
    9.           Exit;    
    10.       AMenu   :=   cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; //第一个内置右键菜单(表头菜单)    
    11.       if   Assigned(AMenu)   and   AMenu.InheritsFrom(TPopupMenu)   then    
    12.       begin    
    13.           TPopupMenu(AMenu).AutoHotkeys   :=   maManual;         //手动热键    
    14.      
    15.           //-------------------------    
    16.           FMenuItem   :=   TMenuItem.Create(Self);    
    17.           FMenuItem.Caption   :=   '-';    
    18.           FMenuItem.Name   :=   'miLineForGroup';    
    19.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    20.      
    21.           //展开所有组    
    22.           FMenuItem   :=   TMenuItem.Create(Self);    
    23.           FMenuItem.Name   :=   'miExpandAllGroup';    
    24.           FMenuItem.Caption   :=   '展开所有组(&X)';    
    25.           FMenuItem.OnClick   :=   miExpandAllGroupClick;    
    26.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    27.      
    28.           //收缩所有组    
    29.           FMenuItem   :=   TMenuItem.Create(Self);    
    30.           FMenuItem.Name   :=   'miCollapseAllGroup';    
    31.           FMenuItem.Caption   :=   '收缩所有组(&O)';    
    32.           FMenuItem.OnClick   :=   miCollapseAllGroupClick;    
    33.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    34.      
    35.           //-------------------------    
    36.           FMenuItem   :=   TMenuItem.Create(Self);    
    37.           FMenuItem.Caption   :=   '-';    
    38.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    39.      
    40.           //过滤面板    
    41.           FMenuItem   :=   TMenuItem.Create(Self);    
    42.           FMenuItem.Name   :=   'miFilterPanel';    
    43.           FMenuItem.Caption   :=   '过滤面板(&P)';    
    44.           //自动显示    
    45.           FSubMenuItem   :=   TMenuItem.Create(Self);    
    46.           FSubMenuItem.Name   :=   'miFilterPanelAuto';    
    47.           FSubMenuItem.Caption   :=   '自动(&A)';    
    48.           FSubMenuItem.RadioItem   :=   True;    
    49.           FSubMenuItem.GroupIndex   :=   5//指定同一组    
    50.           FSubMenuItem.Checked   :=   True;    
    51.           FSubMenuItem.OnClick   :=   miFilterPanelClick;    
    52.           FMenuItem.Add(FSubMenuItem); //加入二级子菜单    
    53.           //总是显示    
    54.           FSubMenuItem   :=   TMenuItem.Create(Self);    
    55.           FSubMenuItem.Name   :=   'miFilterPanelAlways';    
    56.           FSubMenuItem.Caption   :=   '总是显示(&W)';    
    57.           FSubMenuItem.RadioItem   :=   True;    
    58.           FSubMenuItem.GroupIndex   :=   5;    
    59.           FSubMenuItem.OnClick   :=   miFilterPanelClick;    
    60.           FMenuItem.Add(FSubMenuItem);    
    61.           //从不显示    
    62.           FSubMenuItem   :=   TMenuItem.Create(Self);    
    63.           FSubMenuItem.Name   :=   'miFilterPanelNerver';    
    64.           FSubMenuItem.Caption   :=   '从不显示(&N)';    
    65.           FSubMenuItem.RadioItem   :=   True;    
    66.           FSubMenuItem.GroupIndex   :=   5;    
    67.           FSubMenuItem.OnClick   :=   miFilterPanelClick;    
    68.           FMenuItem.Add(FSubMenuItem);    
    69.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    70.      
    71.           //自定义过滤    
    72.           FMenuItem   :=   TMenuItem.Create(Self);    
    73.           FMenuItem.Name   :=   'miCustomFilter';    
    74.           FMenuItem.Caption   :=   '自定义过滤(&M)';    
    75.           FMenuItem.OnClick   :=   miCustomFilterClick;    
    76.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    77.      
    78.           //过滤管理器    
    79.           FMenuItem   :=   TMenuItem.Create(Self);    
    80.           FMenuItem.Name   :=   'miFilterBuilder';    
    81.           TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   44); //添加图标图像    
    82.           FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1//指定图标序号    
    83.           FMenuItem.Caption   :=   '过滤管理器';    
    84.           FMenuItem.OnClick   :=   Self.miFilterBuilderClick;    
    85.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    86.      
    87.           //---------------------    
    88.           FMenuItem   :=   TMenuItem.Create(Self);    
    89.           FMenuItem.Caption   :=   '-';    
    90.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    91.      
    92.           //导出    
    93.           FMenuItem   :=   TMenuItem.Create(Self);    
    94.           FMenuItem.Name   :=   'miExport';    
    95.           TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   37);    
    96.           FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1;    
    97.           FMenuItem.Caption   :=   '导出(&E)';    
    98.           FMenuItem.OnClick   :=   Self.miExportClick;    
    99.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    100.      
    101.           //打印    
    102.           FMenuItem   :=   TMenuItem.Create(Self);    
    103.           FMenuItem.Name   :=   'miPrint';    
    104.           FMenuItem.Caption   :=   '打印(&P)';    
    105.           TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend,   14);    
    106.           FMenuItem.ImageIndex   :=   TPopupMenu(AMenu).Images.Count   -   1;    
    107.           FMenuItem.OnClick   :=   Self.miPrintClick;    
    108.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
    109.       end;    
    110. end;    
    111.      
    112. procedure   TFormItemList.miExportClick(Sender:   TObject);    
    113. var    
    114.       FileName,   FileExt,   msg:   String;    
    115. begin    
    116.       if   Self.aqyQuery.IsEmpty   then    
    117.       begin    
    118.           msg   :=   '没有导出数据...';    
    119.           Application.MessageBox(PChar(msg),   PChar(Application.Title),    
    120.               MB_OK   or   MB_IconWarning);    
    121.           Exit;    
    122.       end;    
    123.      
    124.       Self.SaveDialogExport.Filter   :=   'Excel文件   (*.xls)|*.xls|XML文件   (*.xml)|*.xml'    
    125.           +   '|文本文件   (*.txt)|*.txt|网页文件   (*.html)|*.html';    
    126.       Self.SaveDialogExport.Title   :=   '导出为';    
    127.      
    128.       if   not   Self.SaveDialogExport.Execute   then    
    129.           Exit;    
    130.      
    131.       FileName   :=   Self.SaveDialogExport.FileName;    
    132.       FileExt   :=   LowerCase(ExtractFileExt(FileName));    
    133.       if   FileExt   =   '.xls'   then    
    134.           ExportGrid4ToExcel(FileName,   Self.cxGrid1)    
    135.       else   if   FileExt   =   '.xml'   then    
    136.           ExportGrid4ToXML(FileName,   Self.cxGrid1)    
    137.       else   if   FileExt   =   '.txt'   then    
    138.           ExportGrid4ToText(FileName,   Self.cxGrid1)    
    139.       else   if   FileExt   =   '.html'   then    
    140.           ExportGrid4ToHTML(FileName,   Self.cxGrid1)    
    141.       else    
    142.       begin    
    143.           msg   :=   '不支持的导出文件类型...';    
    144.           Application.MessageBox(PChar(msg),   PChar(Application.Title),    
    145.               MB_OK   or   MB_IconError);    
    146.           Exit;    
    147.       end;    
    148.      
    149.       msg   :=   '导出完成...';    
    150.       Application.MessageBox(PChar(msg),   PChar(Application.Title),    
    151.           MB_OK   or   MB_IconInformation);    
    152. end;    
    153.      
    154. procedure   TFormItemList.miPrintClick(Sender:   TObject);    
    155. begin    
    156.       //打印    
    157.       Self.dxComponentPrinter.Preview(True,   Self.dxComponentPrinterLink1);    
    158. end;    
    159.      
    160. procedure   TFormItemList.cxGridPopupMenuPopup(ASenderMenu:   TComponent;    
    161.       AHitTest:   TcxCustomGridHitTest;   X,   Y:   Integer;   var   AllowPopup:   Boolean);    
    162. begin    
    163.       if   GetHitTypeByHitCode(AHitTest.HitTestCode)   =   gvhtColumnHeader   then //右击列标题时    
    164.       begin    
    165.           //if   tvResult.DataController.Groups.GroupingItemCount   >   0   then    
    166.           if   tvResult.GroupedColumnCount   >   0   then //有分组时显示    
    167.           begin    
    168.             TMenuItem(Self.FindComponent('miLineForGroup')).Visible   :=   True;    
    169.             TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible   :=   True;    
    170.             TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible   :=   True;    
    171.           end    
    172.           else    
    173.           begin    
    174.             TMenuItem(Self.FindComponent('miLineForGroup')).Visible   :=   False;    
    175.             TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible   :=   False;    
    176.             TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible   :=   False;    
    177.           end;    
    178.       end;    
    179. end;    
    180.      
    181. procedure   TFormItemList.miFilterBuilderClick(Sender:   TObject);    
    182. begin    
    183.       //过滤管理器    
    184.       //弹出Filter   Builder   Dialog对话框    
    185.       tvResult.Filtering.RunCustomizeDialog;    
    186. end;    
    187.      
    188. procedure   TFormItemList.miCustomFilterClick(Sender:   TObject);    
    189. var    
    190.       AHitTest:   TcxCustomGridHitTest;    
    191. begin    
    192.       //自定义过滤    
    193.       //弹出Custom   Filter   Dialog对话框    
    194.       AHitTest   :=   cxGridPopupMenu.HitTest;    
    195.       if   GetHitTypeByHitCode(AHitTest.HitTestCode)   =   gvhtColumnHeader   then //获得右击的列    
    196.           tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);    
    197. end;    
    198.      
    199. procedure   TFormItemList.miFilterPanelClick(Sender:   TObject);    
    200. var    
    201.       mi:   TMenuItem;    
    202. begin    
    203.       //隐藏/显示过滤面板    
    204.       mi   :=   TMenuItem(Sender);    
    205.       mi.Checked   :=   True;    
    206.       if   mi.Name   =   'miFilterPanelAlways'   then    
    207.           tvResult.Filtering.Visible   :=   fvAlways    
    208.       else   if   mi.Name   =   'miFilterPanelNerver'   then    
    209.           tvResult.Filtering.Visible   :=   fvNever    
    210.       else    
    211.           tvResult.Filtering.Visible   :=   fvNonEmpty;    
    212. end;    
    213.      
    214. procedure   TFormItemList.miExpandAllGroupClick(Sender:   TObject);    
    215. begin    
    216.       //展开所有组    
    217.       tvResult.DataController.Groups.FullExpand;    
    218. end;    
    219.      
    220. procedure   TFormItemList.miCollapseAllGroupClick(Sender:   TObject);    
    221. begin    
    222.       //收缩所有组    
    223.       tvResult.DataController.Groups.FullCollapse;    
    224. 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;

    [delphi] view plaincopy
    1. //恢复布局    
    2. IniFileName   :=   ExtractFilePath(Application.ExeName)   +   'Layout/'   +   Self.Name   +   '.ini';    
    3. if   FileExists(IniFileName)   then    
    4.       Self.tvResult.RestoreFromIniFile(IniFileName) //从布局文件中恢复    
    5. else    
    6. begin    
    7.       Self.tvResult.BeginUpdate;    
    8.       for   i   :=   0   to   Self.tvResult.ItemCount   -   1   do    
    9.           Self.tvResult.Items[i].ApplyBestFit; //调整为最佳宽度    
    10.       Self.tvResult.EndUpdate;    
    11. end;    
    12.      
    13. //保存布局    
    14. IniFileName   :=   ExtractFilePath(Application.ExeName)   +   'Layout/'   +   Self.Name   +   '.ini';    
    15. if   not   DirectoryExists(ExtractFileDir(IniFileName))   then    
    16.       CreateDir(ExtractFileDir(IniFileName));    
    17. Self.tvResult.StoreToIniFile(IniFileName); //保存为布局文件  
    18.   
    19.   
    20. 实例:  
    21. IniFileName: string;  
    22.   
    23. procedure TMainFM.FormCreate(Sender: TObject);     //窗体创建时读取布局  
    24. var i: Integer;  
    25. begin  
    26.    qyHed.Open;  
    27.    IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';  
    28.    if FileExists(IniFileName) then  
    29.       Self.cxTbv.RestoreFromIniFile(IniFileName) //从布局文件中恢复  
    30.    else  
    31.    begin  
    32.       Self.cxTbv.BeginUpdate;  
    33.       for i := 0 to Self.cxTbv.ItemCount - 1 do  
    34.          Self.cxTbv.Items[i].ApplyBestFit; //调整为最佳宽度  
    35.       Self.cxTbv.EndUpdate;  
    36.    end;  
    37. end;  
    38.   
    39. procedure TMainFM.NSaveGrdClick(Sender: TObject);      //保存布局文件  
    40. begin  
    41.    try  
    42.       IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';  
    43.       if not DirectoryExists(ExtractFileDir(IniFileName)) then  
    44.          CreateDir(ExtractFileDir(IniFileName));  
    45.       Self.cxTbv.StoreToIniFile(IniFileName);  
    46.    except  
    47.    end;  
    48. end;  

    ****************************************************************************

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

     zj:本条与50条重复

    ****************************************************************************

    28 在主从TableView中根据主TableView得到对应的从TableView
    解决:

    var  
          ADetailDC:   TcxGridDataController;  
          AView:   TcxCustomGridTableView;  
    begin  
          with   cxGrid1DBTableView1.DataController   do  
              ADetailDC   :=   TcxGridDataController(GetDetailDataController(FocusedRecordIndex,   0));  
          AView   :=   ADetailDC.GridView;  
    end;

     

    ==============================================================================

    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;

    ============================================================= 
     

    32 根据单元的值设置样式  
    解决:
    procedure   <aForm>.<aColumn>StylesGetContentStyle(  
          Sender:   TcxCustomGridTableView;   ARecord:   TcxCustomGridRecord;  
          AItem:   TcxCustomGridTableItem;   out   AStyle:   TcxStyle);  
    begin  
          if   ARecord.Values[AItem.Index]   =   aSomeValue   then  
              AStyle   :=   <aSomeStyle>;  
    end;  
       
    procedure   <aForm>.<aView>StylesGetContentStyle(  
          Sender:   TcxCustomGridTableView;   ARecord:   TcxCustomGridRecord;  
          AItem:   TcxCustomGridTableItem;   out   AStyle:   TcxStyle);  
    var  
          AColumn:   TcxCustomGridTableItem;  
    begin  
          AColumn   :=   (Sender   as   TcxGridDBTableView).GetColumnByFieldName('Email');  
          if   VarToStr(ARecord.Values[AColumn.Index])   =   ''   then  
              AStyle   :=   cxStyleNullEmail;  
    end;  
       
    ======================================================================
       
    TcxCustomGridTableView.FindItemByName,   TcxGridDBTableView.GetColumnByFieldName   or  
    TcxGridDBDataController.GetItemByFieldName  
       
          with   cxGrid1DBBandedTableView1.DataController   do  
              AValue   :=   Values[FocusedRecordIndex,   GetItemByFieldName('SomeFieldName').Index];  
       
    ****************************************************************************
    33 动态生成BandedView
    解决:
    var  
          AView:   TcxCustomGridView;  
    begin  
          AView   :=   <cxGrid>.CreateView(TcxGridDBBandedTableView);  
          TcxGridDBBandedTableView(AView).DataController.DataSource   :=   <DataSource>;  
          TcxGridDBBandedTableView(AView).Bands.Add;  
          with   TcxGridDBBandedTableView(AView).Bands.Add   do  
          begin  
              Visible   :=   False;  
              FixedKind   :=   fkLeft;  
          end;  
          TcxGridDBBandedTableView(AView).DataController.CreateAllItems;  
          <cxGridLevel>.GridView   :=   AView;
    end;
    ****************************************************************************
    34 当底层数据集为空时显示一条空记录
    解决:
    procedure   <Form>.<cxGrid>Enter(Sender:   TObject);  
    var  
          View:   TcxGridDBTableView;  
    begin  
          View   :=   TcxGridDBTableView((Sender   as   TcxGrid).FocusedView);  
          if   View.DataController.DataSet.IsEmpty   then  
          begin  
              View.DataController.DataSet.Append;  
              View.Controller.EditingController.ShowEdit;  
          end;  
    end;

  • 相关阅读:
    3294 [SCOI2016]背单词
    P4551 最长异或路径
    BZOJ 4260: Codechef REBXOR
    P2322 [HNOI2006]最短母串问题
    P2444 [POI2000]病毒
    P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
    BZOJ 3942: [Usaco2015 Feb]Censoring
    EZOJ #77
    EZOJ #73
    547D Mike and Fish
  • 原文地址:https://www.cnblogs.com/jupt/p/3922933.html
Copyright © 2011-2022 走看看