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格式,导出

16]自画整行和单元格

17]UniDBGrid增加按钮列

18]Argument out of range.错误

19]一行所有列的编辑RowEditor

20]隔行背景色设置StripeRows

21]不显示Title按钮

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

23]设置标题行高

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


1] 数据源DataSource设置为DataSource1


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


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


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

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

然后 点右上角 的 Apply关闭。


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


6]在前面加上序号列

方法1:Options

方法二:

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

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


7]不显示标题栏;Options


8]排序

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

7中的标题栏要可见


9]编辑 和 更新 数据

0]

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

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

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

b)添加 过程

/双击修改数据
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事件里

procedure TMainForm.UniDBGrid1CellContextClick(Column: TUniDBGridColumn;
X, Y: Integer);
begin
n1.Caption:= '删除 '+Column.Field.DataSet.FieldByName('aName').AsString;//单元格的内容 UniPopupMenu1.Popup(X, Y, UniDBGrid1); // 弹出 右键菜单,绑定UniDBGrid1 end;

11]标题别名

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

12]将某列设置为CheckBox格式

     

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

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

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

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

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

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

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

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

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

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

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[].FieldName
+ ' like ''%' + UniDBGrid1.Columns[].Filtering.VarValue + '%''';
aFileterSQL:= aFileterSQL+' and ' + UniDBGrid1.Columns[].FieldName
+ ' like ''%' + UniDBGrid1.Columns[].Filtering.VarValue + '%'''; FDQuery1.Open(aFileterSQL);
end;

14]右键删除一条记录

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

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

c]两个设置

//菜单执行
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]右键删除多条记录

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); // 弹出 右键菜单,绑定UniDBGrid1
end;

c] 执行 删除 多行

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

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

procedure UniDBGridToHTML(aFDquery :TFDQuery;aHTMLFileName:string);
var
aHTMLtext: TstringList;
j: integer;
begin
aHTMLtext := TstringList.Create;
aHTMLtext.Add
('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ' +
'<html> <head> <title></title> </head> ' +
' <body> <table border=".5pt solid windowtext;"; > ' +
' <col width=72 span=3 style='' width:54pt''>'); aHTMLtext.Add(' <tr > ');
for j := to aFDquery.FieldCount do
begin
aHTMLtext.Add('<td>');
aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).FieldName); // 列 名
aHTMLtext.Add('</td>');
end;
aHTMLtext.Add(' </tr> '); aFDquery.First;
while not(aFDquery.Eof) do
begin
aHTMLtext.Add(' <tr > '); for j := to aFDquery.FieldCount do
begin
aHTMLtext.Add('<td>');
aHTMLtext.Add(aFDquery.Fields.FieldByNumber(j).AsString); // 列 值
aHTMLtext.Add('</td>');
end;
aHTMLtext.Add(' </tr> '); aFDquery.Next;
end; aHTMLtext.Add('</table> </body> </html> ');
aHTMLtext.SaveToFile(aHTMLFileName);
aHTMLtext.Free;
end; procedure UniDBGridToCSV(aFDquery :TFDQuery;aCSVFileName:string);//CSV格式
var
aHTMLtext: TstringList;
i, j: integer;
tempStr:string;
begin
aHTMLtext := TstringList.Create;
tempStr := '';
for j := aFDquery.FieldCount downto do
tempStr := aFDquery.Fields.FieldByNumber(j).FieldName + ',' + tempStr;
tempStr := copy(tempStr, , Length(tempStr) - ); //去掉最后一个 ,
aHTMLtext.Add(tempStr);
aFDquery.First;
while not(aFDquery.Eof) do
begin
tempStr := '';
for j := aFDquery.FieldCount downto do
tempStr := aFDquery.Fields.FieldByNumber(j).AsString + ',' + tempStr;
tempStr := copy(tempStr, , Length(tempStr) - ); //去掉最后一个 ,
aHTMLtext.Add(tempStr);
aFDquery.Next;
end;
aHTMLtext.SaveToFile(aCSVFileName);
aHTMLtext.Free;
end; procedure TMainForm.UniButton1Click(Sender: TObject);
begin
UniDBGridToHTML(FDquery1,'aa.html');
UniSession.SendFile('aa.html' //服务器端 文件名
,'anew.html' //客户端 新下载 的文件名
);
/////////////////////////////////////////////////
UniDBGridToCSV(FDquery1,'ae.csv');
UniSession.SendFile('ae.csv' //服务器端 文件名
,'MySearch.csv' //客户端 新下载 的文件名
); end;

16]自画行和单元格

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

17]UniDBGrid增加按钮列

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

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

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

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

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

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

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

官方例子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取消。


20]隔行背景色设置StripeRows

uniDBGrid1.StripeRows:=True;


21]不显示Title按钮

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



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]设置标题行高

procedure TMainForm.UniFormCreate(Sender: TObject);
begin
UniDBGrid1.Columns[].Title.Caption := '<br/>' + UniDBGrid1.Columns[].Title.Caption + '<br/><br/>';
//如果要更宽,多加几个<br/>
UniDBGrid1.Columns[].Title.Caption := '<br/>' + UniDBGrid1.Columns[].Title.Caption + '<br/><br/><br/>';
end;

之前

之后


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

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

UniGUI 之UniDBGrid(05)的更多相关文章

  1. uniGUI学习汇总

    UniGUI之UniLabel(31) uniGUI之自定义JS事件动作ClientEvents(30) uniGUI之文件下载(29) uniGUI之FDQuery(28) uniGUI之UniPo ...

  2. UniGUI 如何进行 UniDBGrid 的单元 Cell 的计算 ?

    来源:http://forums.unigui.com/index.php?/topic/10508-update-dataset-events-in-unidbgrid/?hl=unidbgrid ...

  3. 给uniGUI的表格控件uniDBGrid加上记录序号的列

    uniDBGrid使用起来还是很方便的,但就是没有显示记录序号的功能,必须自己加,参照老外给的解决方案如下: 方案1: 1- 在UniDBGrid建一个第一列 (列的名字起“NO”) 2- 在 Uni ...

  4. Unigui unidbgrid+unidac uniquery联合使用时产生的奇葩问题

    如下一个uniquery查询: SELECT a.id,a.userid,a.name,if(a.completed='T',CONCAT('<a  class="icons" ...

  5. unigui unidbgrid显示列的合计值

    procedure TfrmClient.UniDBGrid1ColumnSummaryResult(Column: TUniDBGridColumn; GroupFieldValue: Varian ...

  6. uniDBGrid导入数据库(转红鱼儿)

    有朋友问如何将excel导入数据库,这是我做的uniGUI项目中代码,实现uniDBGrid导入数据库的函数,因为用了kbmMW,所以你看到是将uniDBGrid导入kbmMWClientQuery, ...

  7. uniGUI for C++ builder之杂七杂八小知识

    uniGUI for C++ builder之杂七杂八小知识 2018年09月30日 22:16:05 中国银行之路在脚下 阅读数:41 标签: uniguibuilder 更多 个人分类: C++ ...

  8. UNIGUI:How to redirect and close session?

    Hello, i would have 2 unigui app. the first app is a simple authentification app and second will be ...

  9. 对unidbgrid的单元格操作

    一.使某行某列单元格disabled: 1. UniStringGrid -> Options -> goEditing = true 2. UniStringGrid -> Ext ...

随机推荐

  1. JAVA基础学习(2)之判断

    2判断 2.1比较 2.1.1比较 System.out.println(amount>=10);输出的值为true或false 2.1.2关系运算 优先级 <算术运算 >赋值运算 ...

  2. element-ui表头render-header 传自定义参数

    最近用到 element 的表格的  render-header 这个属性查了文档 发现: 发现它会返回部分参数 但是因为考虑要工程化,需要自定义传入参数,后来找度娘 ,发现是可以自定义传参的 :re ...

  3. 控制反转(IOC)和依赖注入(DI)

    控制反转(IOC)和依赖注入(DI)IoC(Inversion of Control,控制反转) 是Spring 中一个非常非常重要的概念,它不是什么技术,而是一种解耦的设计思想.它的主要目的是借助于 ...

  4. Protobuf协议--java实现

    Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式.不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态.  pr ...

  5. python的空格和tab混用报错问题

    python中的空格和tab键不能混用,如果则会报类似如下的错误: IndentationError: unindent does not match any outer indentation le ...

  6. python 切片技巧

    说明: 字符串[开始索引:结束索引:步长] 开始索引:从指定位置开始截取: 结束索引:从指定位置结束截取,但不包含该位置的字符. 步长:不指定时步长为1: 1)当步长为正数时候,那么切片是从左到右进行 ...

  7. JPA 级联保存的问题

    前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...

  8. C++ STL之集合set的使⽤

    写在最前面,本文摘录于柳生笔记: set是集合,一个set里面个元素各不相同的,而且set会按照元素从小到大的进行排序,一下是set的常用方法:

  9. 14.浏览器屏幕缩放bug修复

    问题:浏览器缩放时,轮播图显示不全,滚动水平滚动条,发现图片缺失 解决:隐藏水平滚动条,页面都只提供垂直滚动条的需求 global.css /* 水平超出部分默认隐藏 */ #app { overfl ...

  10. Python学习第二十四课——Mysql 外键约束

    外键:主要是关联两个表的 举个栗子:在建表中创建外键 -- 添加外键例子 CREATE TABLE teacher( id TINYINT PRIMARY KEY auto_increment, na ...