为什么这是错的

时间:2013-02-19 12:39:30

标签: delphi devexpress variant tcxgrid

我有以下代码

procedure TfrmJsApplications.colMaintStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
  aColumn: TcxCustomGridTableItem;
  aValue: Variant;
begin
  inherited;
  try
    aColumn := Sender.FindItemByName('colApplication_Doc');
    aValue := aRecord.Values[aColumn.Index];
    if VarToStr(aValue) <> '' then
      colMaint.Properties.Buttons[0].Caption := 'Redigere'
    else
      colMaint.Properties.Buttons[0].Caption := 'Opret'
  except
    on E:exception do
      Logfile.Error('F_JsApplications.colMaintStylesGetContentStyle: ' + E.Message);
  end;

在cxGrid中的列上运行。 但由于某些原因,我根本无法弄清楚这一行

if VarToStr(aValue) <> '' then

使函数崩溃。 我知道当aValue成为Null值时,但据我所知,在这种情况下VarToStr应返回''

1 个答案:

答案 0 :(得分:6)

aValue可能不是NULL而是empty。尝试使用像

这样的检查
if(FindVarData(aValue)^.VType in [varNull, varEmpty])then ...

代替。或

if VarIsEmpty(aValue) or VarIsNull(aValue) then