假设数据库DataSource1已正确连接。Sqlite框架Delphi10.3.rar 下载

01]DataSource设置为DataSource1
02]创建显示所有列

03]拖列名到上面三角形,可以 分组显示 
031]分组合计功能
04]不显示分组栏
05]导出为.xls
06]增加合计行
07]去掉cxGrid1中的标题栏中过滤下拉箭头
08]去除 ,点击标题栏字段上升或者下降排序
09]能否 末尾添加/删除/编辑/插入
10]设置行高
11]设置字体

12]只读
13]选择整行
14]添加行号列

15]cxGrid1中使用像DBGridEH中的PickList、KeyList同样 ,相当于外键

16]多选 行,及 获取,表头全选/全不选

17]列内容 居左/居中/居右

18]进度条%百分之显示

19]删除选中行  cxGrid1DBTableView1.DataController.DeleteSelection;

20插入新行: 按 键盘上 的Insert键

21]批量插入新行

22]条件查询

23]末尾添加按钮列

24]表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设置了。

25]表头字体颜色

26]添加表头图标,及设置左右位置,列重命名

27]列宽,直接在设计时 拖动 列宽

28]分组标题栏右键菜单和表格右键

29]支持只拉取一部分数据,分页

30]让 cxgrid 滚动条滚动到最右边


01]cxGrid1的cxGrid1DBTableView1.DataController.DataSource设置为DataSource1


02]创建显示所有列


03]拖列名到上面三角形,可以 分组显示 

 

 


031]分组合计功能

  031a]确保分组栏已显示
  031b]

 

Format参数特别说明:

S(num)=0.##       S(num)=是不变的    0.##   是两位小数

S(id)=#              S(id)=是不变的           #是整数

运行时

  

Clipboard.AsText := cxGrid1.ActiveView.DataController.Summary.FooterSummaryText;
 Clipboard.AsText:= cxGrid1DbTableView1.DataController.Summary.GroupFooterSummaryTexts[0,0,0];  //这个取的是分段合计数

04]不显示分组栏 

cxGrid1DBTableView1.OptionsView.GroupByBox:=false;

 


05]导出为.xls

uses cxGridExportLink ;

function SaveToExcel(gridMain: TcxGrid; FileName: string): string;
var
    SaveFileDialog: TSaveDialog;
begin
    SaveFileDialog := TSaveDialog.Create(nil);
    SaveFileDialog.FileName := FileName;
    SaveFileDialog.Filter := '*.xls';
    if SaveFileDialog.Execute then
    begin
        if pos('.XLS', UpperCase(SaveFileDialog.FileName)) <= 0 then
            SaveFileDialog.FileName := SaveFileDialog.FileName + '.XLS';
        ExportGridToExcel(SaveFileDialog.FileName, gridMain);
        ShowMessage('数据已成功导出到 '+ SaveFileDialog.FileName+' 目录中');
    end;
    Result := SaveFileDialog.FileName;
    SaveFileDialog.Free;
end;

procedure TForm13.Button1Click(Sender: TObject);
begin
  SaveToExcel(cxGrid1,'c:\aaa.xls;');
end;

06]增加合计行

 1]  cxGrid1DBTableView1.OptionsView.Footer:=true;  

2]  

 

Format参数特别说明:

S(num)=0.##       S(num)=是不变的    0.##   是两位小数

S(id)=#              S(id)=是不变的           #是整数


07]去掉cxGrid1中的标题栏中过滤下拉箭头

cxGrid1DBTableView1.OptionsCustomize.ColumnFiltering:=false;

;


 08]类似  [07],去除 ,点击标题 栏 自动 排序 功能 ,字段上升或者下降排序。

cxGrid1DBTableView1.OptionsCustomize.ColumnSorting:=false;

 


09]能否  末尾添加/删除/编辑/插入

 cxGrid1DBTableView1.OptionsData.Appending;


 10]设置行高

  10a]  这是针对所有数据行的行高 ,简单

cxGrid1DBTableView1.OptionsView.DataRowHeight:=30;

 

    10b] 这个可以针对不同行的行高,但会使上面的10a] 行高不生效

 


11]设置字体

  [01]拖一个cxStyleRepository1到界面上,并双击

  [02]点击Add,添加csStyle,字体样式

[03]绑定字体样式

 


12]只读:设置 cxGridDBTableView.OptionsData.Editing 属性为 False。

13]选择整行:设置 cxGridDBTableView.OptionsSelection.CellSelect 属性为 False。
选择整行后,也是 只读了。 要可编辑 这两项 要同时为True;


14]添加行号列

      14a]先添加所有实际列

   14b]添加充数列

 

    14c] 添加代码

 

procedure TForm13.FDQuery1aNumGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
 Text:= IntToStr(Sender.DataSet.RecNo);
end;

    14d]移动到第一列

 

再双击

 


15]cxGrid1中使用像DBGridEH中的PickList、KeyList同样,相当于外键

   15a]将列的Properties改为ImageComboBox

 

    15b]设置Items

 

,对应的Picklist到desciption及key到Value中,如下图所示.

15c]添加图标

      拖一个ImageList1到界面上,添加图标,设置.//当然,你也可以添加cxImageList1,有好多自带图标

 

 

 


16]多选 行,及 获取

cxGrid1DBTableView1.OptionsSelection.CellMultiSelect:= True;
cxGrid1DBTableView1.OptionsSelection.CheckBoxVisibility:=[cbvDataRow];  //这样第一条会选中 但在 下面直接改不会选中第一行

 

遍历选中代码

procedure TForm13.Button2Click(Sender: TObject);
var i:integer;
begin
   for I := 0 to cxGrid1DBTableView1.DataController.GetSelectedCount-1 do
  begin
    ShowMessage(cxGrid1DBTableView1.DataController.GetValue(
    cxGrid1DBTableView1.DataController.GetSelectedRowIndex(i)    //  选中的 行
    ,1) // 要获取值的字段索引 从 0 开始, 这里获取第2个字段
    );
  end;
end;

 表头全选/全不选


17]列内容 居中/左对齐/右对齐

 

当属性为memo的时候 没有办法设置 垂直方向居中;所以 我用label;或 TextEdit可以 设置 垂直方向居中。memo label textedt 都一样 没有多大区别,不必深究,能实现效果就好。 


18]进度条%百分之显示


19]删除选中行  

case Application.MessageBox(Pwidechar('确定 要删除: '+inttostr(cxGrid1DBTableView1.DataController.GetSelectedCount)), '删除', MB_YESNO or MB_ICONQUESTION) of
      ID_YES:
            cxGrid1DBTableView1.DataController.DeleteSelection;
      ID_NO:
        ;
end

20插入新行: 按 键盘上 的Insert键


21]批量插入新行

拖一个FDQuery到界面上,命名为FDQueryAdd

FDQueryAdd.Connection:= FDConnection1;
procedure TForm13.Button2Click(Sender: TObject);
var i:integer;
begin
   for I := 0 to 5 do
  begin
     FDQueryAdd.SQL.Text:='insert into  ToDoListTable values( '
                                                          + inttostr(i+10)+', '
                                                          + '''ab''' +', '
                                                          + '1' +', '
                                                          + '0.5'  +')';
     FDQueryAdd.ExecSQL;
  end;
  FDQuery1.Active:=false;
  FDQuery1.Active:=true;
end;

 22]条件查询

FDQuery1.Active:=false;
FDQuery1.Open('select *  from aTable  where name like ''%'+trim(edit1.Text)+'%''  ' );

23]末尾添加按钮列

如果前面框架中对表格的某些属性做了设置,可能按钮点击无效,则需要把这些设置改回来(我在这里折腾了半天)

  cxGrid1DBTableView1.OptionsSelection.CellSelect := true;       //修改框架中的值,使得表格中的按钮能点击使用
  cxGrid1DBTableView1.OptionsData.Editing := True;               //修改框架中的值,使得表格中的按钮能点击使用

     14a]先添加所有实际列

   14b]添加充数列

 

14c]cxGrid添加所有列

设置按钮列的properties是ButtonEdit

2、设置properties下的属性 viewStyle=vsButtonsAutoWidth

3、设置Options中的 ShowEditButtons=isebAlways

 

4、点击properties下的buttons按钮,弹出设置框,这里可以设置按钮的kind=bkText,此时按钮显示文本。 同时设置Caption 为按钮名

Events里Properties下的OnButtonClick事件添加。

procedure TForm13.cxGrid1DBTableView1aButtonPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);

begin
case Application.MessageBox(Pwidechar('确定 要删除: '+
string(cxGrid1DBTableView1.DataController.Values[cxGrid1DBTableView1.Controller.FocusedRowIndex,1])  //1为第二列 

), '删除', MB_YESNO or MB_ICONQUESTION) of
      ID_YES:
            cxGrid1DBTableView1.DataController.DeleteSelection;
      ID_NO:
        ;
end
end;

 


24]表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设置了。

 


25]表头字体颜色

a]cxGrid1.LookAndFeel.NativeStyle 需要设置为False。

b]设置表头字体颜色


26]添加表头图标,及设置左右位置,列重命名


27]列宽,直接在设计时 拖动 列宽


28]分组标题栏右键菜单

  拖一个cxGridPopupMenu1到界面上,并将Grid设置为cxGrid1

 分组标题栏后,右键,即可弹出 菜单来

正文表格右键cxGrid1的PopuMenu是普通标准的右键菜单


29]支持只拉取一部分数据,分页

 GridView.DataController.DataModeController.GridMode=True;

再设置GridModeBufferCount为200,实地运行的结果很好.如果此项置0,也没关系,cxGrid会自动设置一个大约180左右的分页值. 

--------------------------------------

当设置gridmode=true时,则在cxGrid上设置的filtering,sorting,footer中的合计信息均无效 --待验证

 --------------------------------------

cxGrid 有一个 SmartRefresh这个一个属性,我看了源码,当设为True时,那么在View获得或者更新数据时,先会 DataSet.DesableControls;完了之后再DataSet.EnableControls,不信你设一下,速度会快很多.


30]让 cxgrid 滚动条滚动到最右边

  cxGrid1DBTableView1.Controller.FocusedRowIndex := ADOQuery1.RecordCount;    // 最后一行
  cxGrid1DBTableView1.Controller.FocusedItemIndex := ADOQuery1.FieldCount-1;  // 最后一列