我在Pascal中创建了一个记录类型TTableData,用于存储来自TStringGrid的信息供以后使用:
TTableData = record
header: String[25]; //the header of the column (row 0)
value : String[25]; //the string value of the data
number: Integer; //the y-pos of the data in the table
end;
但是每当我尝试通过遍历TStringGrid来初始化这些对象并从单元格中获取值时,值变为('','',0)(除了几个单元格,但不知何故结果正常)。
这是我从TStringGrid读取数据的过程:
procedure TfrmImportData.butDoneClick(Sender: TObject);
begin
Halt;
end;
{ initialize records which are responsible
for storing all information in the table itself }
procedure TfrmImportData.initTableDataObjects();
var
i, j: Integer;
begin
SetLength(tableData, StringGrid1.ColCount, StringGrid1.RowCount);
for j:= 0 to StringGrid1.RowCount-1 do begin
for i:= 0 to StringGrid1.ColCount-1 do begin
with tableData[i,j] do begin
header := StringGrid1.Cells[i,0];
value := StringGrid1.Cells[i,j];
number := i;
end;
end;
end;
for i:= 0 to StringGrid1.RowCount - 1 do begin
for j:=0 to StringGrid1.ColCount - 1 do begin
ShowMessage(tableData[i,j].header+': '+tableData[i,j].value);
end;
end;
end;
我不确定这里发生了什么。当我使用断点并慢慢遍历代码时,我可以看到数据最初是正确读取的(通过将鼠标悬停在第二个for循环的tableData [i,j]上以查看其当前值)但是当我在循环中尝试ShowMessage(...),这个值出错了。
提前致谢,
答案 0 :(得分:1)
分配时,您正在寻址单元格[Col,Row],这是正确的。在您的控制循环(ShowMessage
)中,您已切换到寻址[Row,Col],这是不正确的。
答案 1 :(得分:0)
您在代码中混合了row / col和i / j。
这可能是你打算做的事情:
procedure TfrmImportData.initTableDataObjects();
var
i, j: Integer;
begin
SetLength(tableData, StringGrid1.RowCount, StringGrid1.ColCount);
for i:= 0 to StringGrid1.RowCount-1 do begin
for j:= 0 to StringGrid1.ColCount-1 do begin
with tableData[i,j] do begin
header := StringGrid1.Cells[i,0];
value := StringGrid1.Cells[i,j];
number := i;
end;
end;
end;
for i:= 0 to StringGrid1.RowCount - 1 do begin
for j:=0 to StringGrid1.ColCount - 1 do begin
ShowMessage(tableData[i,j].header+': '+tableData[i,j].value);
end;
end;
end;