我有一个带有复选框列,字符串列和整数列的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,也没有用户数据。