Delphi FMX TIntegerColumn SetValue:无效的类型转换

时间:2019-04-29 05:12:43

标签: delphi firemonkey delphi-10.3-rio

我有一个带有复选框列,字符串列和整数列的FMX TGrid。我设法使字符串列和复选框列起作用。但是,当我更改整数列时,传递给SetValue命令的TValue似乎没有传递整数。

我已经设置了一个字符串列(StrNumber)以执行我想要的操作,但是如果我尝试处理IntegerColumn中的值,则会得到ClassCastException。我已经尝试了各种数字类型以及Value.AsBoolean,Value.AsString等,但是我总是收到无效的Typecast。

procedure MyApp.SuppGridSetValue(Sender: TObject; const ACol, ARow: Integer;  const Value: TValue);
begin
   if SuppGrid.Columns[ACol] = StrNumber then
      Caption := IntToStr(StrToIntDef(Value.AsString,1));
   else if SuppGrid.Columns[ACol] = Number then
      Value.AsInteger; //see note
   end;

注意:在上面的代码中,即使“ Value.AsInteger”确实起作用,也不会被使用,但这清楚地表明问题不在创建ClassCastException的其他调用上。

在调试时,检查窗口也不提供太多功能。似乎无论我尝试将其设置为什么值,该值都将全为0或nil。

(FData:(FTypeInfo:$4012BC; FValueData:TValueDataImpl($B7D78E8) as IValueData; FAsUByte:0; FAsUWord:0; FAsULong:0; FAsObject:nil; FAsClass:nil; FAsSByte:0; FAsSWord:0; FAsSLong:0; FAsSingle:0; FAsDouble:0; FAsExtended:0; FAsComp:0; FAsCurr:0; FAsUInt64:0; FAsSInt64:0; FAsMethod:(Code:nil; Data:nil); FAsPointer:nil))

也就是说,我尝试(在GetValue中)设置一个直接的简单值:

 Value := 42; 

还使用发件人呼叫:

 Value := TValue.From<Integer>(42); //doesn't work for an integer column

在这些情况下,值“ 42”显示在右列中,但是传递给SetValue例程的值似乎既没有原始值42,也没有用户数据。

0 个答案:

没有答案