Delphi CxGrid 汇总(4)

时间:2022-05-08 04:58:11

1.     CxGrid汇总成果

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

Delphi CxGrid 汇总(4)

Delphi CxGrid 汇总(4)

2.       CxGrid的样式设置

当设置了Kind时,NativeStyle必需设置为False,如果指定了SkinName则Kind属性掉效。

Delphi CxGrid 汇总(4)

下图是设置skinname为MoneyTwins后效果

Delphi CxGrid 汇总(4)

 

4.       取某个单元格的值

Cxgrid.DataController.Values[i,j]

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

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

Delphi CxGrid 汇总(4)

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

②     Properties选择ButtonEdit,并对该列的属性编纂器设置如部属性Buttons属性添加按钮项,对按钮项设置可以设置kind属性界说按钮样式;ViewStyle属性设置为vsButtonsOnly,Options-ShowEditButton设置为isebAlways。可以编写点击事件如下:

procedure TForm1.cxgrdbtblvwGrid1DBTableView1Column1PropertiesButtonClick(

Sender: TObject; AButtonIndex: Integer);

begin

ShowMessage(‘aaa‘);

end;

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

Delphi CxGrid 汇总(4)

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] 

 

const    

      CM_SETFOCUSEDRECORD   =   WM_USER   +   1002;    

     

type    

      TForm1   =   class(TForm)    

          cxGrid1DBTableView1:   TcxGridDBTableView;    

          cxGrid1Level1:   TcxGridLevel;    

          cxGrid1:   TcxGrid;    

          dxMemData1:   TdxMemData;    

          dxMemData1Field1:   TStringField;    

          dxMemData1Field2:   TIntegerField;    

          DataSource1:   TDataSource;    

          cxGrid1DBTableView1RecId:   TcxGridDBColumn;    

          cxGrid1DBTableView1Field1:   TcxGridDBColumn;    

          cxGrid1DBTableView1Field2:   TcxGridDBColumn;    

          Timer1:   TTimer;    

          CheckBox1:   TCheckBox;    

          procedure   Timer1Timer(Sender:   TObject);    

          procedure   dxMemData1AfterPost(DataSet:   TDataSet);    

          procedure   CheckBox1Click(Sender:   TObject);    

      private