我使用FMX在Delphi 10.2中做了一个非常简单的测试项目。 设置很简单:
一切正常,TGrid中填充了XML文件中的所有记录。 XML文件由旧项目中的另一个TClientDataSet创建。
现在出现问题。
当我将列移动到另一个位置时,所有数据都会混乱。我这样做只需将鼠标按在一列上,然后向右拖动几列即可
起初它看起来很好,但是当你开始垂直滚动时,似乎数据不再在正确的列中
我觉得它只能纠正网格可视部分的数据,并且一旦开始滚动,数据就不再是正确的列。
这是一个已知错误还是我的项目有问题 正如我之前所说,在这个项目中绝对没有代码都在设计器中完成。 (除了clientdataset1.LoadFromFile offcourse)
答案 0 :(得分:1)
您可以尝试手动填充数据(Grid: TGrid; CDS: TClientDataSet
):
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
Col: TColumn;
begin
CDS.Active := True;
for I := 0 to CDS.FieldDefs.Count - 1 do begin
Col := TColumn.Create(Grid);
Grid.AddObject(Col);
Col.Header := CDS.FieldDefs[I].Name;
Col.Tag := I;
end;
Grid.RowCount := CDS.RecordCount;
end;
procedure TForm1.GridGetValue(Sender: TObject; const ACol, ARow: Integer; var Value: TValue);
begin
CDS.First;
CDS.MoveBy(ARow);
Value := CDS.Fields[ACol].Text;
end;
在此之后,您可以将我的解决方案用于列:stackoverflow.com/q/43418528/2292722
答案 1 :(得分:1)
这为我修好了。 我只是在ClientDataSet中移动在网格中移动的字段,到目前为止它似乎都有效。
procedure TForm1.Grid1ColumnMoved(Column: TColumn; FromIndex, ToIndex: Integer);
var
FieldFrom : string;
FieldTo : string;
begin
FieldFrom := Grid1.ColumnByIndex(FromIndex).Header;
FieldTo := Grid1.ColumnByIndex(ToIndex).Header;
ClientDataSet1.FieldByName(FieldFrom).Index := FromIndex;
ClientDataSet1.FieldByName(FieldTo).Index := ToIndex;
end;
但我只是希望从TColumn有更好的方法来了解哪个字段名称。似乎这个班级缺少最重要的信息。