(中行雷威2019.12.5)
(同一个世界,同一个梦想,交流学习C++Builder and Delphi XE10,传承c++builder and Delphi的魅力!欢迎各地朋友加入我的QQ群484979943、299497712,860634510,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)
【阅读倡议】
1、有问题请留言;
2、没问题请点赞;
3、看连载请加群;
4、下源码请加群;
【开发工具】
1、C++Builder and Delphi 10.3.3
2、FMSoft_uniGUI_Complete_Professional_1.70.0.1514(正版)
9.16.8 为UniDBGrid增加按钮列
按钮列就是在表格行首、行尾或其它指定位置放置几个按钮,点击按钮时触发不同动作,UniDBGrid实现这个功能很简单。创建一个新项目,添加一个UniDBGrid、一个UniConnection、一个SQLiteUniProvider、两个UniQuery,一个UniDataSource和一个UniNativeImageList控件,使用SQLite数据库创建一个custom表,五个列分别是cus_no编号、cus_name姓名、cus_sex性别、cus_age年龄、cus_addr地址,按照以往案例分别设置好UniDBGrid和各个数据库控件之间的关联关系,双击UniConnection1控件,指向SQLite数据库文件,链上数据库,让项目运行时表格能够显示SQLite数据库的custom表的数据。
1、按照MainForm窗口添加需要的各个控件,并为窗口添加OnActivate事件
procedure TMainForm.UniFormActivate(Sender: TObject);
begin
UniQuery1.Close;
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('select * from custom order by cus_no');
UniQuery1.Open;
end;
- 将UniDBGrid1的Images属性设为UniNativeImageList1,双击UniNativeImageList1,添加几个image子目录下的小图片,用做按钮图片,如下侧左图所示。
- 点中UniQuery1将其SQL属性如上侧右图所示配置查询语句
select * from custom;//获取UniDBGrid1关联表的各个字段
- 点击UniDBGrid1控件,在开发环境左上侧Structure区域选择UniDBGrid1的Columns,右键添加六列,分别设置前五列的FieldName属性(关联字段名称)、Title->Caption属性(列标题名称)和Width属性(列宽),如下图所示:
- 点中第六列,将其FieldName设为“button”(名字随意,输入时会提示数据库链接错误,多次忽略即可),将其Title->Caption设为“操作”,将其ActionColumn->Enabled属性设置为True,将其ActionColumn->Buttons属性打开,增加三个按钮,分别点击每个TUniGridActionButton-x按钮,设置其ButtonId(按钮编号)、Hint(提示信息)、ImageIndex(关联到UniNativeImageList1的图片编号)属性,如下图所示:
- 点击UniDBGrid1,在开发环境左下侧Object Inspector区域选择Events,添加OnColumnActionClick事件,简单示意点击不同按钮调用不同事件:
procedure TMainForm.UniDBGrid1ColumnActionClick(Column: TUniDBGridColumn;
ButtonId: Integer);
begin
if ButtonId=0 then
begin
UniQuery2.Close;
UniQuery2.SQL.Clear;
UniQuery2.SQL.Add('insert into custom values(:p1,:p2,:p3,:p4,:p5)');
UniQuery2.ParamByName('p1').Value:=FormatDateTime('hhnnss',Now());
UniQuery2.ParamByName('p2').Value:='张三';
UniQuery2.ParamByName('p3').Value:='男';
UniQuery2.ParamByName('p4').Value:='30';
UniQuery2.ParamByName('p5').Value:='武汉市长江东路999号';
UniQuery2.ExecSQL;
UniQuery1.Refresh;
ShowMessageN('添加成功!');
end
else if ButtonId=1 then
begin
UniQuery1.Delete;
ShowMessageN('删除成功!');
end
else if ButtonId=2 then
begin
UniQuery2.Close;
UniQuery2.SQL.Clear;
UniQuery2.SQL.Add('update custom set cus_age=:p2 where cus_no=:p1');
UniQuery2.ParamByName('p1').Value:=UniQuery1.FieldByName('cus_no').AsString;
UniQuery2.ParamByName('p2').Value:=UniQuery1.FieldByName('cus_age').AsString.ToInteger+1;
UniQuery2.ExecSQL;
UniQuery1.Refresh;
ShowMessageN('修改成功!');
end;
end;