xe7的clientdatset(cdsrope)+dbgrid,
其中cds里面有一個兩個計算欄位(duedate, balance) 的都是fkinternalcalc型別。
在cds的oncalc事件中計算這兩個欄位值,想在dbgrid中根據balance的值,如果小于30就顯示紅色加粗,否則就正常顯示,
看了很久,結果和預想的相反,麻煩高手看看代碼哪里有問題,或者設定哪里?
cds的計算事件程序如下:
procedure TfmQuRope.cdsQueryCalcFields(DataSet: TDataSet);
begin
//self.cdsQuery.
// if dataset.State=dsinternalcalc then
begin
dataset.FieldByName('duedate').AsDateTime:=dataset.FieldByName('begindate').AsDateTime +
self.cdsQuery.FieldByName('life').AsInteger;
dataset.FieldByName('balance').AsInteger := trunc(dataset.FieldByName('begindate').AsDateTime
- today)+dataset.FieldByName('life').AsInteger;
end;
end;
dbgrid的drawcolumncell事件如下:
procedure TfmQuRope.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if self.cdsQuery.RecNo mod 2 = 0 then
(Sender as TDBGrid).Canvas.Brush.Color := clskyblue
else
(Sender as TDBGrid).Canvas.Brush.Color := clwindow;
if gdselected in State then
(Sender as TDBGrid).Canvas.Brush.Color := clolive;
// if (sametext(Column.FieldName, 'balance') = true) and
//(self.DBGrid1.Columns[DataCol].Items[1]<30) then
if (datacol=24) and
(Column.Field.AsInteger < fmmain.AdvanceDay) then
//就是這句判斷當前列的值是否小于30
begin
//Column.Font.Style := Column.Font.Style + [fsbold];
Column.Font.Color := clred;
end
else
begin
Column.Font.Color := cldefault;
//Column.Font.Style := Column.Font.Style - [fsbold];
end;
(Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
另外還發現由于dbgrid的title里面欄位balance的width默認是94的話,這個欄位所有都是默認加粗的,運行時,滑鼠拉動一下寬度,粗體就不顯示了。如果設計時寬度調整為95以后,這列的值就不會加粗了。

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282773.html
標籤:VCL組件開發及應用
上一篇:c語言桌面程式無回應
