UniGUI 之UniDBGrid(05)

目录
1]DataSource设置
2]显示MEMO类型里的文字
3]显示悬浮提示
4]显示当前记录及总记录数
5]读取所有记录,及分页
6]在前面加上序号列
7]不显示标题栏
8]列排序
9]编辑 和 更新 数据
10]获得某单元格里的内容

11]标题别名

12]将某列设置为CheckBox格式

13]列标题下显示过滤编辑框,自动对列数据进行过滤

14.1]右键删除一条记录

      14.2]右键删除多条记录

15]将UniDBGrid数据另存为网页/CSV格式,导出

      15.2用uniGUI自带控件导出为Excel的xlsx格式,只适合1534版本以上

16]自画整行和单元格

17]UniDBGrid增加按钮列

18]Argument out of range.错误

19]一行所有列的编辑RowEditor

20]隔行背景色设置StripeRows

21]不显示Title按钮

22]UniDBGrid当前列名/当前行总数/数据遍历

23]设置标题行高,表头设置

24]设置某列的左右对齐(不含标题)

25]设置某列为进度条显示

26]unigui的dbgrid点击列标题进行排序

27]遍历选中行

28_UniDBGrid 实现分页,下拉选择每页数据行数,pageSize

29unidbgrid 如何替换某个字段的显示值 比如字段值为0的时候 显示成功  1显示不成功

30激活列头末尾的排序菜单,运用UniDBGrid列头实现排序


1] 数据源DataSource设置为DataSource1


 2]  unidbgrid1.Columns[1].DisplayMemo:=true;  //显示MEMO类型里的文字,不设置只会显示(WIDEMEMO),不显示文字内容。

 UniGUI 之UniDBGrid(05)_uniGUI教程


3] unidbgrid1.Columns[1].ShowToolTip:=true;//当鼠标悬浮在某单元格上,在鼠标后面显示单元格内容;

 UniGUI 之UniDBGrid(05)_uniGUI学习_02


4]显示当前记录及总记录数

UniGUI 之UniDBGrid(05)_uniGUI学习_03

  function pagingBar.beforeInit(sender, config)
{ config.displayInfo = true;}

然后 点右上角 的 Apply关闭。

UniGUI 之UniDBGrid(05)_uniGUI学习_04 


5]读取所有记录,及是否  分页。  WebOptions.FetchAll

 UniGUI 之UniDBGrid(05)_uniGUI学习_05


 6]在前面加上序号列

方法1:Options

UniGUI 之UniDBGrid(05)_uniGUI教程_06

  方法二:

UniGUI 之UniDBGrid(05)_uniGUI学习_07

 在UniDBGrid的ExtEvents事件下加如下代码:

sender.headerCt.insert(0,new Ext.grid.RowNumberer({text:'',width:'auto',align:'center',menuDisabled:false}));


7]不显示标题栏;Options

UniGUI 之UniDBGrid(05)_uniGUI教程_08

  UniGUI 之UniDBGrid(05)_uniGUI学习_09


8]排序 

 unidbgrid1.Columns[1].Sortable:= True;

UniGUI 之UniDBGrid(05)_uniGUI教程_10

 7中的标题栏要可见


9]编辑 和 更新 数据

0]UniGUI 之UniDBGrid(05)_uniGUI教程_11

 

 放一个UniHiddenPanel,在里面加入编辑控件UniEdit3之类的

a)先将   wideMemo类型的要匹配 UniEdit,

 unidbgrid1.Columns[0].Editor:= UniEdit3;

UniGUI 之UniDBGrid(05)_uniGUI教程_12

 b)添加 过程

UniGUI 之UniDBGrid(05)_uniGUI教程_13 

/双击修改数据procedure TMainForm.UniDBGrid1SetCellValue(Sender: TObject; ACol, ARow: Integer;
  AField: TField; var Value: Variant);begin
 self.UniDBGrid1.DataSource.DataSet.Edit;
  self.UniDBGrid1.DataSource.DataSet.FieldByName(self.UniDBGrid1.Columns.Items[Acol].FieldName).Value:=Value;
  self.UniDBGrid1.DataSource.DataSet.Post;end;

 双击,修改后,回车,即可。


10]获得某单元格里的内容。

在UniDBGrid1的OnCellClick事件里

procedure TMainForm.UniDBGrid1CellClick(Column: TUniDBGridColumn);begin
   if Column.FieldName = 'info' then //列名
  unimemo1.Text:=  VarToStr(Column.Field.Value) ;//Column.Field.Valueo为单元格的内容end;

在UniDBGrid1的OnCellContextClick事件里

= +Column.Field.DataSet.FieldByName(单元格的内容

UniPopupMenu1.Popup(X, Y, UniDBGrid1);  

;

11]标题别名

  UniDBGrid1.Columns[1].Title.Caption := '成语';

12]将某列设置为CheckBox格式

UniGUI 之UniDBGrid(05)_uniGUI教程_14     UniGUI 之UniDBGrid(05)_uniGUI学习_15

 左边是最终结果,右边是数据库里 的数据。

UniGUI 之UniDBGrid(05)_uniGUI学习_16

     unidbgrid1.Columns[2].CheckBoxField.AutoPost:=True; //当用户点选CheckBox后,改变前端显示并根据该属性决定:
                                                         //True—立即自动提交到数据集中并刷新前端显示
                                                         //False—只改变前端显示,当记录滚动时再提交数据集
     unidbgrid1.Columns[2].CheckBoxField.BooleanFieldOnly:=False; //是否只针对Boolean字段,
                                                                 //True—只能识别Boolean字段,非Boolean字段将不能显示CheckBox
                                                                 //False—DisplayValues和FieldValues可以针对非Boolean字段进行处理
     unidbgrid1.Columns[2].CheckBoxField.DisplayValues := 'Day;Night' ;   //DisplayValues存储显示文字  ,不设置 则 显示 True/False;
     uniDBgrid1.Columns[2].CheckBoxField.Enabled:= True;       // 一定为True;False则 不显示CheckBOx
     unidbgrid1.Columns[2].CheckBoxField.FieldValues:='0;1';    //FieldValues存储字段值,

     unidbgrid1.Columns[2].Alignment := taLeftJustify;        //靠左 排列

13]列标题下显示过滤编辑框,自动对列数据进行过滤

UniGUI 之UniDBGrid(05)_uniGUI学习_17

        a].放一个TUniHiddenPanel控件在窗体上,然后将TUniEdit等编辑控件放置在这个隐藏的Panel内;

       b]一定要手动右键手动添加列 ;

UniGUI 之UniDBGrid(05)_uniGUI学习_18

       c]设置要过滤的列的Filtering,将其Editor属性设置对应的编辑控件

  FDQuery1.Open('select id,name,info from atb');

UniDBGrid1.Columns[0].FieldName:='id';

  UniDBGrid1.Columns[1].FieldName:='name';
  UniDBGrid1.Columns[1].DisplayMemo := true;
  UniDBGrid1.Columns[1].Filtering.ChangeDelay := 900;  //当用户键入字符后,延时进行过滤处理的毫秒数
  UniDBGrid1.Columns[1].Filtering.Editor := UniEdit1;   //编辑控件 放在hidenPanel
  UniDBGrid1.Columns[1].Filtering.Enabled := true;   //Boolean是否允许进行过滤,一定为True;
  UniDBGrid1.Columns[1].Title.Caption:='成语';
  UniEdit1.CharEOL:=#13;  //表示回车 确定 开始  这很重要
  UniDBGrid1.Columns[2].FieldName:='info';
  UniDBGrid1.Columns[2].DisplayMemo := true;
  UniDBGrid1.Columns[2].Filtering.ChangeDelay := 900;
  UniDBGrid1.Columns[2].Filtering.Editor := UniEdit2;
  UniDBGrid1.Columns[2].Filtering.Enabled := true;
  UniDBGrid1.Columns[2].Title.Caption:='解释';
  UniEdit2.CharEOL:=#13;

     d]回车后的事件还得自己写。

UniGUI 之UniDBGrid(05)_uniGUI教程_19

procedure TMainForm.UniDBGrid1ColumnFilter(Sender: TUniDBGrid;  const Column: TUniDBGridColumn; const Value: Variant);var    aFileterSQL: string;begin
  aFileterSQL := 'select *  from atb  where 1=1 ';
  aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[1].FieldName    + ' like ''%' + UniDBGrid1.Columns[1].Filtering.VarValue + '%''';
  aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[2].FieldName    + ' like ''%' + UniDBGrid1.Columns[2].Filtering.VarValue + '%''';

    FDQuery1.Open(aFileterSQL);end;

14]右键删除一条记录

      a]在MainModule的BrowserOptions.boDisableMouseRightClick设为True;//  不显示网页自带的右键菜单,显示自定义右键菜单

      b]添加右键菜单,放一个UniPopupMenu1在窗口上,并添加菜单aPopupMenu,并添加事件

UniGUI 之UniDBGrid(05)_uniGUI学习_20

    c]两个设置

UniGUI 之UniDBGrid(05)_uniGUI学习_21

//菜单执行procedure TMainForm.aaClick(Sender: TObject);begin        //删除该行
  MessageDlg('是否删除该行?', mtConfirmation, mbYesNo,    procedure(Sender: TComponent; Res: Integer)    begin
      Case Res of
        mrYes: // 点Yes后执行的语句
          begin
               unidbgrid1.DataSource.DataSet.Delete;          end;
        mrNo:   // 点No后执行的语句
          begin
            caption := 'mrNo'
          end;      end;    end);end;//c]将uniDBGrid的右键事件绑定右键菜单事件。procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn; X,  Y: Integer);begin
  n1.Caption:= '删除  '+Column.Field.DataSet.FieldByName('aName').AsString;
   UniPopupMenu1.Popup(X, Y, UniDBGrid1);end;

14.2]右键删除多条记录

UniGUI 之UniDBGrid(05)_uniGUI学习_22

    a]将这四项 勾选  dgRowSelect   dgCheckSelect dgMultiSelect dgDontShowSelected

    b]UniDBGrid1的OnCellContextClick事件

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;
  X, Y: Integer);begin
  n1.Caption:= '删除  '+ inttostr(UniDBGrid1.SelectedRows.Count) +'  项?';

  UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 弹出 右键菜单,绑定UniDBGrid1end;

     c] 执行 删除 多行

var aStr:string;beginaStr:=   uniDBGrid6.DataSource.DataSet.FieldByname('Organize').AsString;  // 如果该项已使用,不能删除
  FDQuery3.Open('SELECT distinct 所属部门 FROM MainTable where  所属部门 = '''+
   aStr +    '''');  if (FDQuery3.RecordCount > 0) then
  begin
    ShowMessage(aStr+'  已被使用中,不能删除!');
    Exit;  end;
  UniDBGrid1.SelectedRows.Delete; // 删除多行end;

  15]将UniDBGrid数据另存为网页/CSV格式,方便导出

 UniDBGridToHTML(aFDquery :TFDQuery;aHTMLFileName:= TstringList. +     +     +     j :=   aFDquery.FieldCount 
    
      aHTMLtext.Add( (aFDquery.Eof) 
   j :=   aFDquery.FieldCount 
    
      aHTMLtext.Add( UniDBGridToCSV(aFDquery :TFDQuery;aCSVFileName:);= TstringList.=  j := aFDquery.FieldCount   = aFDquery.Fields.FieldByNumber(j).FieldName +  += copy(tempStr, , Length(tempStr) - );  (aFDquery.Eof) =  j := aFDquery.FieldCount   = aFDquery.Fields.FieldByNumber(j).AsString +  += copy(tempStr, , Length(tempStr) - );   
                   ,          UniDBGridToCSV(FDquery1, , ;

15.2用uniGUI自带控件导出为Excel的xlsx格式,只适合1534版本以上

1】添加一个UniGridExcelExporter1控件到界面 上,可以设置它的一些属性

 UniGUI 之UniDBGrid(05)_uniGUI学习_23

2】绑定UniDBGrid1的Exporter属性为1】中UniGridExcelExporter1,并在此设置Excel文件的一些属性

 UniGUI 之UniDBGrid(05)_uniGUI学习_24

3】导出事件,UniButton1的导出代码:

UniDBGrid1.Exporter.ExportGrid;


 

 16]自画行和单元格

procedure TMainForm.UniDBGrid1DrawColumnCell(Sender: TObject; ACol,
  ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);begin
  if ACol=0 then    // 某列
  begin
    Attribs.Color:=$E0E0E0;
    Attribs.Font.Style:=[fsBold];  end;  if ARow=1 then   //某行
  begin
    Attribs.Color:=$ffffff;
    Attribs.Font.Style:=[fsItalic];  end;  if Column.FieldName='UnitPrice' then
  begin
    if Column.Field.AsFloat>100 then
    begin
      Attribs.Font.Color:=clMaroon;
      Attribs.Font.Style:=[fsBold, fsItalic];    end;  end
  else if Column.FieldName='Quantity' then
  begin
    if Column.Field.AsInteger<200 then
    begin
      Attribs.Font.Color:=clRed;
      Attribs.Font.Style:=[fsBold];
      Attribs.Color:=clLtGray;    end;  end;end;

 


17]UniDBGrid增加按钮列

a]将UniDBGrid1的Images属性设为UniNativeImageList1,双击UniNativeImageList1,添加几个image子目录下的小图片,用做按钮图片,如下侧左图所示。

UniGUI 之UniDBGrid(05)_uniGUI教程_25

b] 点中UniQuery1将其SQL属性如上侧右图所示配置查询语句

select * from custom;//获取UniDBGrid1关联表的各个字段

c]点击UniDBGrid1控件,在开发环境左上侧Structure区域选择UniDBGrid1的Columns,右键添加所有数据列,分别设置前五列的FieldName属性(关联字段名称)、Title->Caption属性(列标题名称)和Width属性(列宽),如下图所示:再新增一按钮列

UniGUI 之UniDBGrid(05)_uniGUI教程_26

d]点中最后一列,将其FieldName设为“button”(名字随意,输入时会提示数据库链接错误,多次忽略即可),将其Title->Caption设为“操作”,将其ActionColumn->Enabled属性设置为True,将其ActionColumn->Buttons属性打开,增加三个按钮,分别点击每个TUniGridActionButton-x按钮,设置其ButtonId(按钮编号)、Hint(提示信息)、ImageIndex(关联到UniNativeImageList1的图片编号)属性,如下图所示:

 UniGUI 之UniDBGrid(05)_uniGUI教程_27UniGUI 之UniDBGrid(05)_uniGUI教程_28

 e]点击UniDBGrid1,在开发环境左下侧Object Inspector区域选择Events,添加OnColumnActionClick事件,简单示意点击不同按钮调用不同事件:

procedure TMainForm.UniDBGrid1ColumnActionClick(Column: TUniDBGridColumn;
  ButtonId: Integer);begin
 if ButtonId=0 then begin  // 左键点击 删除图标 删除一列    UniDBGrid1.DataSource.DataSet.Delete; end;end;

UniGUI 之UniDBGrid(05)_uniGUI教程_29

官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop\Grid - ActionColumn


 18]Argument out of range.错误

Argument out of range.错误往往 是uniDBGrid有右键手动添加的固定列,删除该固定列。


19]一行所有列的编辑,RowEditor

uniDBGrid1.RowEditor:=Ture;

设置后,双击(可以在ClicksToEdit属性里设置)某一行,所有列的都可以编辑,最后点Confirm提交,点Cancel取消。

UniGUI 之UniDBGrid(05)_uniGUI学习_30

UniGUI 之UniDBGrid(05)_uniGUI教程_31


20]隔行背景色设置StripeRows

 uniDBGrid1.StripeRows:=True;


 21]不显示Title按钮

UniGUI 之UniDBGrid(05)_uniGUI学习_32

UniDBGrid1.Columns[0].Menu.MenuEnabled:=False;

UniGUI 之UniDBGrid(05)_uniGUI学习_33


 


22UniDBGrid当前列名/当前行总数/数据遍历/动态创建Filtering.Editor

UniDBGrid1.Columns[UniDBGrid1.CurrCol].FieldName;//当前列名
UniDBGrid1.DataSource.DataSet.Refresh;//更新数据

unidbgrid1.DataSource.DataSet.RecordCount//当前行总数。

procedure TMainForm.UniFormCreate(Sender: TObject);//动态创建Filtering.Editor
Var
 THidenPanel: TUniHiddenPanel;
 TEdit: TUniEdit;
begin

THidenPanel:= TUniHiddenPanel.Create(self);
 THidenPanel.Parent := Self;  //<--------------------
 THidenPanel.Name:= 'THiddenPanel';

TEdit:= TUniEdit.Create(self);
 TEdit.Parent:= THidenPanel;
 TEdit.Name:= 'TEdit';
 TEdit.EmptyText:= 'teste';

if Assigned(TEdit) then
 begin
   UniDBGrid1.Columns[3].Filtering.Editor:= TEdit;
   UniDBGrid1.Columns[3].Filtering.Enabled:= True;
 end;

end;


23]设置标题行高

].Title.Caption :=  + UniDBGrid1.Columns[].Title.Caption + 
  UniDBGrid1.Columns[].Title.Caption :=  + UniDBGrid1.Columns[].Title.Caption + ;

UniGUI 之UniDBGrid(05)_uniGUI教程_34之前

 UniGUI 之UniDBGrid(05)_uniGUI学习_35之后 

.x-column-header{/*表头设置*/color:black;/*字体颜色*/font-size:13px;/*字体大小*/height: 50px;/*表头高度*/border: none;/*表头框线*/background:#C1C1C1;/*表头背景*/}.GridLotacao .x-grid-column {/*带元素id的属性(设置栏),在unidbgrid中的layoutconfig属性中的cls子属性中加入GridLotacao名称*/
    height: 50px;
}
 .GridLotacao .x-grid-cell {/*带元素id的属性(设置单元格),在unidbgrid中的layoutconfig属性中的cls子属性中加入GridLotacao名称*/
    height: 50px !important;
    line-height: 50px !important;
}

 


 24]设置某列的左右对齐(不含标题)

UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列TAlignment = (taLeftJustify, taRightJustify, taCenter);

 25]设置某列为进度条显示

注意:UniDBGrid1DrawColumnCell事件里不用调用类似

//  UniDBGrid1.Columns[3].Width := 90;//  UniDBGrid1.Columns[0].Alignment := taLeftJustify; // 靠左 排列UniDBGrid1.Columns[3]类似属性,要写在FormCreate

 a]假设FDQuery1的相关数据库设置都已连好。

 b]右击UniDBGrid1的Columns,新增与FDQuery1相对应的字段,进度条字段为整数类型pro

]UniGUI 之UniDBGrid(05)_uniGUI教程_36

c]放一个UniProgressbarWidget1,并设置Min,Max属性0,100

 UniGUI 之UniDBGrid(05)_uniGUI教程_37 

 d]关联字段

UniGUI 之UniDBGrid(05)_uniGUI教程_38 

 e]书写数据库代码

procedure TMainForm.UniFormCreate(Sender: TObject);begin
   UniDBGrid1.Columns[0].Width := 90;
  FDQuery1.Connection := UniMainModule.FDConnection1;

  UniMainModule.FDConnection1.LoginPrompt := False; // 取消登录提示框
  UniMainModule.FDConnection1.Open('DriverID=SQLite;Database=test1.Sqlite3');

  FDQuery1.Open('select isDone   ,aName  ,id,pro from ToDoListTable');//这里写UniDBGrid1中对应的列名end;

还有两个参数可显示

UniGUI 之UniDBGrid(05)_uniGUI学习_39 

UniGUI 之UniDBGrid(05)_uniGUI学习_40 

要显示百分率,ShowPercent和ShowValue 必同时设为True

UniGUI 之UniDBGrid(05)_uniGUI教程_41 


 

26]unigui的dbgrid点击列标题进行排序

procedure DBGridSortByCol(dbGrid: TUniDBGrid; Column: TUniDBGridColumn; Direction: Boolean);  var OrderStr:string;
      OrderPos:integer;
      SqlStr:string;
      Para:TUniParams;
      DescStr:string;
      OldSqlStr:string;beginif Direction=True thenDescStr:=''elseDescStr:=' desc';

OldSqlStr:=(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text;

SqlStr:=LowerCase(OldSqlStr);


Para:=(dbGrid.DataSource.DataSet as TUniQuery).Params;

OrderPos:=Pos(' order ',SqlStr);if OrderPos=-1 thenbegin
  SqlStr:=SqlStr+' order by '+Column.FieldName;endelsebegin
  SqlStr:=Copy(SqlStr,0,OrderPos)+' order by '+Column.FieldName;;end;

(dbGrid.DataSource.DataSet as TUniQuery).Close;
(dbGrid.DataSource.DataSet as TUniQuery).SQL.Text:=SqlStr+DescStr;
(dbGrid.DataSource.DataSet as TUniQuery).Params:=Para;
(dbGrid.DataSource.DataSet as TUniQuery).Open;end;

27]遍历选中行

var
i:integer;
aStr:string;
begin
    for i := 0 to (UniDBGrid1.SelectedRows.Count - 1) do begin
      UniDBGrid1.DataSource.DataSet.Bookmark  :=  UniDBGrid1.SelectedRows[i];
      aStr:=aStr+'_'+ UniDBGrid1.DataSource.DataSet.FieldByName('设备型号').AsString;
    end;
     MessageDlg(aStr, mtConfirmation, [mbOK],nil);
end;

UniGUI 之UniDBGrid(05)_uniGUI教程_42


 

 28_UniDBGrid 实现分页,下拉选择每页数据行数,pageSize

https://blog.csdn.net/u012449478/article/details/99678435?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

UniGUI 之UniDBGrid(05)_uniGUI教程_43



29unidbgrid 如何替换某个字段的显示值 比如字段值为0的时候 显示成功  1显示不成功
procedure flagGetText(Sender: TField; var Text: string; DisplayText: Boolean);procedure dbg_cmdlogDrawColumnCell(Sender: TObject; ACol, ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);

procedure TUniFm_logCmd.flagGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);begin
  if Sender.Asinteger = 1 then
    Text := '成功 '
  else
    Text := '失败 ';end;procedure TUniFm_logCmd.dbg_cmdlogDrawColumnCell(Sender: TObject; ACol,
  ARow: Integer; Column: TUniDBGridColumn; Attribs: TUniCellAttribs);begin
  if Column.FieldName = 'Flag' then
  begin
    Column.Field.OnGetText := flagGetText;  end ;end;

30激活列头末尾的排序菜单,运用UniDBGrid列头实现排序

UniGUI 之UniDBGrid(05)_uniGUI教程_44

 

发表于 2020-02-02 13:48 涂磊  阅读(1999)  评论(0) 编辑 收藏