• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DelphiCxGrid汇总(4)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.     CxGrid汇总功能

 OptionsView-Footer设置为True,显示页脚   ② CxGrid的Summary选项卡定义要汇总的列和字段名及汇总方式,Footer选项卡定义单个汇总,Default For Groups定义按组汇总。OptionsView-GroupFooters设置为gfAlwaysVisible则显示按组汇总。设置后界面如图。

   

2.       CxGrid的样式设置

 当设置了Kind时,NativeStyle必须设置为False,如果指定了SkinNameKind属性失效。

  

下图是设置skinnameMoneyTwins后效果

  

4.       取某个单元格的值

 Cxgrid.DataController.Values[i,j]

5.       列操作,选择CxGrid控件后,点击“Customize”新建一列,在Columns集合中选中新建的列,选择propertites属性可以设置该列的显示形式。下面介绍常用的几个

     Properties选择CheckBox,则该列显示一个复选框,如下:

 判断是否选中 if  Cxgrid.DataController.Values[i,j]=’1’   选中

     Properties选择ButtonEdit,并对该列的属性编辑器设置如下属性Buttons属性添加按钮项,对按钮项设置可以设置kind属性定义按钮样式;ViewStyle属性设置为vsButtonsOnlyOptions-ShowEditButton设置为isebAlways。可以编写点击事件如下:

procedure TForm1.cxgrdbtblvwGrid1DBTableView1Column1PropertiesButtonClick(

  Sender: TObject; AButtonIndex: Integer);

begin

  ShowMessage('aaa');

end;

ImageComboBox,可以关联一个imagelist,显示图片。如下关联imagelist后效果。

 

 

6.动态添加列和记录行

var

Column:   TcxGridColumn;

i:integer;

acount:integer;

 

begin

    Column:= cxgrd1TableView1.CreateColumn;

    Column.Caption   :=   'Test ';

    cxgrd1TableView1.DataController.AppendRecord;

    cxgrd1TableView1.DataController.Values[0,   0]   :=   'ABC ';

cxgrd1TableView1.DataController.Post;

 

//添加多条记录

for i:=1 to 4 do

  begin

    acount:=cxgrd1TableView1.DataController.RecordCount;

    cxgrd1TableView1.DataController.AppendRecord;

    cxgrd1TableView1.DataController.Values[acount,   0]   :=IntToStr(i*1);

    cxgrd1TableView1.DataController.Post();

  end;

end;

 

  //删除记录

   cxgrd1TableView1.DataController.DeleteRecord(0);

end;

50 保存/恢复带汇总行的布局

<TableView>.StoreToIniFile('c:\Grid.ini', True, [gsoUseSummary]);
<GridView>.RestoreFromIniFile(<inifilename>,True,False {or True, optional},[gsoUseSummary]);

****************************************************************************
51 取消过滤时移到第一行
解决:
uses  
      cxCustomData;  
   
procedure   TYour_Form.AViewDataControllerFilterChanged(Sender:   TObject);  
var  
      Filter:   TcxDataFilterCriteria;  
begin  
      with   Sender   as   TcxDataFilterCriteria   do  
          if   IsEmpty   then  
              DataController.FocusedRowIndex   :=   0;  
end;
****************************************************************************
52 排序后移到第一行
解决:
可以设置DataController.Options.FocusTopRowAfterSorting   :=   True,也可以使用如下的代码:  
   
uses  
      cxCustomData;  
   
procedure   TYour_Form.Your_ViewDataControllerSortingChanged(Sender:   TObject);  
begin  
      TcxCustomDataController(Sender).FocusedRowIndex   :=   0;  
end;
****************************************************************************
53 判断当前行是否第一行或最后一行
解决:
可以使用DataController的IsBOF,   IsEOF方法,或者:  
<AView>.Controller.Controller.FocusedRow.IsFirst  
<AView>.Controller.Controller.FocusedRow.IsLast
****************************************************************************
54 根据指定值查找记录
解决:
DataController提供了好几个方法来得到指定值对应的RecordIndex  
对于Bound   View可以使用FindRecordIndexByKeyValue方法
****************************************************************************
55 编辑和显示Blob字段
解决:
该字段的Properties设置为BlobEdit,并将BlobPaintStyle   属性设为   bpsText
****************************************************************************
56 得到可见行数
解决:
<View>.ViewInfo.VisibleRecordCount
****************************************************************************
57 保存后的行设置为当前行
解决:

[delphi] view plaincopy
  1. const    
  2.       CM_SETFOCUSEDRECORD   =   WM_USER   +   1002;    
  3.      
  4. type    
  5.       TForm1   =   class(TForm)    
  6.           cxGrid1DBTableView1:   TcxGridDBTableView;    
  7.           cxGrid1Level1:   TcxGridLevel;    
  8.           cxGrid1:   TcxGrid;    
  9.           dxMemData1:   TdxMemData;    
  10.           dxMemData1Field1:   TStringField;    
  11.           dxMemData1Field2:   TIntegerField;    
  12.           DataSource1:   TDataSource;    
  13.           cxGrid1DBTableView1RecId:   TcxGridDBColumn;    
  14.           cxGrid1DBTableView1Field1:   TcxGridDBColumn;    
  15.           cxGrid1DBTableView1Field2:   TcxGridDBColumn;    
  16.           Timer1:   TTimer;    
  17.           CheckBox1:   TCheckBox;    
  18.           procedure   Timer1Timer(Sender:   TObject);    
  19.           procedure   dxMemData1AfterPost(DataSet:   TDataSet);    
  20.           procedure   CheckBox1Click(Sender:   TObject);    
  21.       private    
  22.           procedure   CMSetFocusedRecord(var   Msg:   TMessage);   message   CM_SETFOCUSEDRECORD;    
  23.       public    
  24.           {   Public   declarations   }    
  25.       end;    
  26.      
  27. var    
  28.       Form1:   TForm1;    
  29.       FocusedIdx:   Integer;    
  30.      
  31.      
  32. implementation    
  33.      
  34. {$R   *.dfm}    
  35.      
  36. procedure   TForm1.Timer1Timer(Sender:   TObject);    
  37. begin    
  38.       dxMemData1.AppendRecord(['',   IntToStr(Random(1000)),   Random(1000)]);    
  39. end;    
  40.      
  41. procedure   TForm1.dxMemData1AfterPost(DataSet:   TDataSet);    
  42. begin    
  43.       PostMessage(Handle, CM_SETFOCUSEDRECORD,   Integer(cxGrid1DBTableView1),   MakeLParam(cxGrid1DBTableView1.Controller.FocusedRowIndex,   cxGrid1DBTableView1.Controller.TopRowIndex));    
  44. end;    
  45.      
  46. procedure   TForm1.CMSetFocusedRecord(var   Msg:   TMessage);    
  47. begin    
  48.       TcxGridDBTableView(msg.WParam).Controller.FocusedRowIndex   :=   Msg.LParamLo;    
  49.       TcxGridDBTableView(msg.WParam).Controller.TopRowIndex   :=   Msg.LParamHi;    
  50. end;    
  51.      
  52. procedure   TForm1.CheckBox1Click(Sender:   TObject);    
  53. begin    
  54.       Timer1.Enabled   :=   TCheckBox(Sender).Checked;    
  55. end;    
  56.      
  57. end.  
  58. ****************************************************************************  
  59. 58 删除记录并获得焦点  
  60. 解决:  
  61. procedure   TForm1.BtnDeleteClick(Sender:   TObject);    
  62. var    
  63.       FocusedRow,   TopRow:   Integer;    
  64.       View:   TcxGridTableView;    
  65.       DataController:   TcxGridDataController;    
  66. begin    
  67.       View   :=   cxGrid1.FocusedView   as   TcxGridTableView;    
  68.       DataController   :=   View.DataController;    
  69.      
  70.       //   Remember   the   top   row   (the   vertical   scrollbar   position)    
  71.       TopRow   :=   View.Controller.TopRowIndex;    
  72.       //   Remember   the   focused   row(!)   index    
  73.       FocusedRow   :=   DataController.FocusedRowIndex;    
  74.      
  75.       DataController.DeleteFocused;    
  76.      
  77.       //   After   deletion   the   same   row   must   be   focused,    

  78. 鲜花

    握手

    雷人

    路过

    鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab 中try/catch语句发布时间:2022-07-18
下一篇:
Matlab if elseif else条件语句如何使用?发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap