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窗口添加需要的各个控件,并为窗口添加**事件
void __fastcall TMainForm::UniFormActivate(TObject *Sender)
{
UniQuery1->Close();
UniQuery1->SQL->Clear();
UniQuery1->SQL->Add("select * from custom order by cus_no");
UniQuery1->Open();
}
- 将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事件,简单示意点击不同按钮调用不同事件:
void __fastcall TMainForm::UniDBGrid1ColumnActionClick(TUniDBGridColumn *Column, int ButtonId)
{
if(ButtonId==0)
{
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("添加成功!");
}
else if(ButtonId==1)
{
UniQuery1->Delete();
ShowMessageN("删除成功!");
}
else if(ButtonId==2)
{
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.ToInt()+1;
UniQuery2->ExecSQL();
UniQuery1->Refresh();
ShowMessageN("修改成功!");
}
}