delphi Firemonkey(FMX)中的数据集IndexFieldNames问题

ig9co6j1  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(117)

这个问题只发生在firemonkey上。使用VCL,它可以完美地工作。
我有一个数据集(任何类型)连接到一个网格(任何类型),当点击列的标题时,必须按相应的字段进行排序。
For VCL

procedure TForm2.DBGrid1TitleClick(Column: TColumn);
begin
  qrySec.IndexFieldNames := Column.FieldName;
end;

对于FMX

procedure TManFarmaQry.StringGrid1HeaderClick(Column: TColumn);
begin
     
case Column.Index of
          0:
            if mtblMedica.IndexFieldNames = 'Field1' then
              mtblMedica.IndexFieldNames := 'Field1' + ':D'
            else
              mtblMedica.IndexFieldNames := 'Field1';
    
          1:
            if mtblMedica.IndexFieldNames = 'Field2' then
              mtblMedica.IndexFieldNames := 'Field2' + ':D'
            else
              mtblMedica.IndexFieldNames := 'Field2';
          2:
            if mtblMedica.IndexFieldNames = 'Field3' then
              mtblMedica.IndexFieldNames := 'Field3' + ':D'
            else
              mtblMedica.IndexFieldNames := 'Field3';
        end;
end;

在FMX的情况下,观察到寄存器的重新排列,但它不对应于任何东西。把一切弄得乱七八糟。
我认为,由于Firedac在这两种情况下使用,问题不存在。那么在绑定中就有一个同步问题。
Delphi 10.3.3

lxkprmvk

lxkprmvk1#

希望我找到的解决方案能为其他人服务,我把它放在这里。

procedure TManFarmaQry.StringGrid1HeaderClick(Column: TColumn);
begin
  // Putting things practical    
      if mtblMedica.IndexFieldNames = LinkGridToDataSourceBindSourceDB1.Columns[Column.Index].MemberName then
        mtblMedica.IndexFieldNames := LinkGridToDataSourceBindSourceDB1.Columns[Column.Index].MemberName + ':D'
      else
        mtblMedica.IndexFieldNames := LinkGridToDataSourceBindSourceDB1.Columns[Column.Index].MemberName;

    
    // Here is the solution. Refresh datasource
        LinkGridToDataSourceBindSourceDB1.Active := False;
        LinkGridToDataSourceBindSourceDB1.Active := True;

end;

相关问题