firemonkey (FMX) 中数据集 IndexFieldNames 中的问题

问题描述 投票:0回答:1

该问题仅出现在 firemonkey 中。与 VCL 完美配合。

我有一个连接到(任何类型)网格的数据集(任何类型) 单击列标题时,必须按相应字段排序。

对于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,那么问题就不存在了。那么bind中就存在同步问题。

德尔福10.3.3

sorting delphi indexing grid firemonkey
1个回答
0
投票

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

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;
© www.soinside.com 2019 - 2024. All rights reserved.