各位專家,為了這個問題折磨幾天了,使用devexpress VCL的cxGrid表格,配合UniDAC控制元件操作資料庫。
其中一列是查詢出來的列,沒有系結到表中的任何一個欄位,因此是無法編輯的。但是實際使用的時候需要能讓用戶看到操作的結果,于是設定該列的Properties為ButtonEdit,在ButtonClick事件中處理,然后回傳資料。
努力了很久,終于實作部分功能:
procedure TfrmManageInputMaterial_FL.cxGrid1DBTableView1PRODUCTIDPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
var
frmMultiCheck: TfrmMultiCheck;
rowindex,colindex:integer;
strReturnName:string;
begin
try
rowindex:=cxGrid1DBTableView1.DataController.FocusedDataRowIndex;
colindex:=cxGrid1DBTableView1PRODUCTID.Index;
frmMultiCheck:=TfrmMultiCheck.Create(application);
if frmMultiCheck.ShowModal = mrOk then
begin
strReturnName:=frmMultiCheck.strReturnName;
self.qryInput.Edit;
self.qryInput.FieldByName('productid').Value:=frmMultiCheck.strReturn;//實際要保存到資料庫的列
self.qryInput.Post;
cxGrid1DBTableView1.ViewData.Records[rowindex].Values[colindex] := strReturnName;//重點在這3行,實作了未系結列的修改
TcxButtonEdit(Sender).EditValue:=strReturnName;
TcxButtonEdit(Sender).PostEditValue;
end;
finally
frmMultiCheck.Free;
end;
end;
但上述代碼是有瑕疵的,點擊按鈕,彈出視窗,修改單元格的值,一切看起來很美好,但是,但是當滑鼠點擊到這個單元格的時候,這個單元格的值又恢復成最原始的值。單元格失去焦點后,才顯示為修改后的值。
行得到焦點都沒事,只要滑鼠點擊這個單元格就恢復……
各路英雄豪杰,請出手相助!
uj5u.com熱心網友回復:
資料集控制元件應該包括欄位串列吧,在問題欄位的TField.OnGetText事件中,定制Text值為修改后的值(你的目標值)。uj5u.com熱心網友回復:
比如select id,getnamebyid(id) as itemname from dual,itemname欄位就沒有對應到一個可編輯的欄位。你說的我試過,也不行……uj5u.com熱心網友回復:
可否新增一個計算欄位,然后需操作的列系結該計算欄位。uj5u.com熱心網友回復:
這兩個控制元件似乎沒有計算欄位一說轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24151.html
標籤:VCL組件開發及應用
上一篇:求做一套題
