我需要让FMX.StringGrid中的TCheckColumn从一个整数值开始工作,但我不知道怎么做。我的代码从JSON请求中读取并将其转换为字符串网格。在数据库中;布尔值";字段存储为整数,因此0表示false,1表示true。这是从请求中读取的代码:
procedure TDM.CarregaDados(aTable: string; aGrid: TStringGrid);
begin
TThread.CreateAnonymousThread(
procedure
var
str: string;
begin
aGrid.RowCount := 0;
REST.Response := nil;
REST.Resource := aTable;
REST.Method := rmGET;
REST.Params.ClearAndResetID;
REST.Execute;
RESTDSA.Response := REST.Response;
RESTDSA.DataSet := RESTDS;
RESTDSA.Active := true;
TThread.Synchronize(nil,
procedure
var
I: Integer;
begin
aGrid.BeginUpdate;
while not RESTDS.Eof do
begin
aGrid.RowCount := aGrid.RowCount + 1;
for I := 0 to RESTDS.FieldCount - 1 do
aGrid.Cells[I, aGrid.RowCount - 1] := RESTDS.Fields.Fields
[I].AsString;
RESTDS.Next;
end;
aGrid.EndUpdate;
end);
REST.ClearBody;
REST.Params.ClearAndResetID;
end).Start;
end;
REST是TRESTRequest组件,RESTDS是TFDMemTable,RESTDSA是TRESTRequestDataSetAdapter组件,aGrid是TStringGrid,aTable是端点资源。
我想知道的是如何调整这些代码,使其与网格中的TCheckColumn一起工作。是的,当然我之前在网格中添加了一个TIntegerColumn、一个TStringColumn和一个TCheckColumn。
这是一个JSON响应示例:
[
{
"ID" : 1,
"Descr" : "test",
"ischeck" : 0
},
{
"ID" : 2,
"Descr" : "test",
"ischeck" : 1
}
]
我知道已经很晚了,但我是这里的新手,这是我第一次在没有Livebindings的情况下使用FMX.TStringGrid。
我找到了这个问题的解决方案,用我自己的数据
procedure TCsv4Presta.StringGrid1CellClick(const Column: TColumn;
const Row: Integer);
begin
case Column.Index of
0 : begin // my checkboxcolumn
StringGrid1.Cells[0,Row]:= BooltoStr(Not StrToBool(StringGrid1.Cells[0,Row]),true);
Column.UpdateCell(Row); // important to refresh checkbox
end;
end;
end;
只是这个onclick的问题,你必须管理单元格中的点击,而不是复选框上的点击
所以我可以建议你一个像这样的代码
while not RESTDS.Eof do
begin
aGrid.RowCount := aGrid.RowCount + 1;
for I := 0 to RESTDS.FieldCount - 1 do
begin
if aGrid.Columns[I] is TCheckBoxColumn then
begin
aGrid.Cells[I, aGrid.RowCount - 1] := BooltoStr(RESTDS.Fields.Fields
[I].AsString='1',true) ;
// Column.UpdateCell(Row);
end
else aGrid.Cells[I, aGrid.RowCount - 1] := RESTDS.Fields.Fields
[I].AsString;
end;
RESTDS.Next;
end;