如你沒有提供一個MCVE,我創建了自己,並且其代碼和DFM提取物 如下。它的操作應該是不言而喻的 - 它將Value
計算的 字段設置爲列表框中的選定值。列表框的OnClick 處理程序調用ClientDataSet.First
的要點是要導致數據集滾動,因此 將調用其OnCalcFields事件。
該項目沒有表現出你所稱的問題(儘管目前尚不清楚 究竟是什麼意思,因爲該值不被「接受」)。無論ListBox 中的哪個項目被點擊,相應的貨幣值都會顯示在DBEdit前面 的系統固有符號中,唯一的例外是0.1875 顯示爲「£0.19」,因爲默認情況下該值被四捨五入爲兩小數位。我的程序在D7和D10西雅圖運行一致,順便說一句。
所以,不管是什麼原因導致你的問題出現在你的項目中,你沒有包含在你的q中的 ,這表明沒有其他值的MCVE。
在評論你說:
當我按下按鈕,計算器,我只是分配Edit1.text值計算領域。
那麼,這不是你的Button1Click處理程序所做的,根據你q中的代碼。如果爲,則將值賦給計算的字段,而不是在OnCalcFields事件中,則應在檢查之前檢查數據集是否在適當的State
(TDataSetState
)之前。你是?
代碼:
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
ClientDataSet1ID: TIntegerField;
ClientDataSet1Value: TCurrencyField;
ListBox1: TListBox;
procedure ClientDataSet1CalcFields(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
public
end;
[...]
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
ClientDataSet1.FieldByName('Value').AsString := ListBox1.Items[ListBox1.ItemIndex];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.ItemIndex := 0;
ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1]);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
ClientDataSet1.First;
end;
DFM提取
object DBEdit1: TDBEdit
DataField = 'Value'
DataSource = DataSource1
end
object ListBox1: TListBox
Items.Strings = (
'0'
'0.1875'
'0.25'
'0.50'
'0.75'
'1.0')
OnClick = ListBox1Click
end
object ClientDataSet1: TClientDataSet
Aggregates = <>
Params = <>
OnCalcFields = ClientDataSet1CalcFields
object ClientDataSet1ID: TIntegerField
FieldName = 'ID'
end
object ClientDataSet1Value: TCurrencyField
FieldKind = fkCalculated
FieldName = 'Value'
Calculated = True
end
end
object DataSource1: TDataSource
DataSet = ClientDataSet1
end
你應該張貼的字段類型,什麼SQL是填滿你的數據集。 – RBA
你的q需要一個MCVE。另外,爲什麼使用TDBEdit,它允許編輯一個字段值和一個計算字段? – MartynA
當我按下Calc按鈕時,我只是將Edit1.text值分配給計算字段。但它不會更新0.25,0.50等的計算字段。 –