(中行雷威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;