2

使用 FDMemtable 时,我似乎无法让 DBGrid 中的固定行标题右对齐。每当我将字段对齐设置为 taRightJustify 时,它都会完美地对齐数据单元格。但是,DBGrid 标题始终是左对齐的。

更令人沮丧的是,我可以将相应的 DBGrid 列标题对齐设置为 taRightJustify,它在 IDE 中看起来非常好。但是当我运行程序时,列标题显示为左对齐。

有没有人找到一种方法让 DBGrid 列标题在使用 FDMemtable 时保持正确?

顺便说一句,taCenter 也会发生这种情况。数据单元居中对齐,但标题保持左对齐。

PEBKAC

这个问题是我自己造成的。我没有调用 DBGrid 列编辑器并添加所有字段。相反,我使用的是“结构”窗格并以这种方式进入 DBGrid 列。尽管结构窗格允许我修改列标题,但这只是暂时的,并且在程序运行时不会持续存在。

4

2 回答 2

3

我也无法使用 TFDMemTable 重现该问题。

我在一个新的 VCL 应用程序的主窗体上放置了一个TFDMemTable,TDataSourceTDBGrid,像往常一样连接它们(网格的数据源设置为DataSource1,数据源DataSet设置为FDMemTable1),然后将以下代码添加到窗体的OnCreate事件中:

procedure TForm3.FormCreate(Sender: TObject);
begin
  FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, True);
  FDMemTable1.FieldDefs.Add('LastName', ftString, 20);
  FDMemTable1.FieldDefs.Add('FirstName', ftString, 20);
  FDMemTable1.FieldDefs.Add('Salary', ftCurrency);
  FDMemTable1.CreateDataSet;
  FDMemTable1.Active := True;
  FDMemTable1.AppendRecord([1, 'Smith', 'John', 30000]);
  FDMemTable1.AppendRecord([2, 'Jones', 'Jane', 40000]);
  FDMemTable1.AppendRecord([3, 'Doe', 'David', 2500]);
  DBGrid1.Columns[3].Alignment := TAlignment.taRightJustify;
  DBGrid1.Columns[3].Title.Alignment := TAlignment.taRightJustify;
end;

如果我在设计时设置所有内容,它也可以正常工作。重复我上面使用的相同设置步骤,但不使用代码,而是使用以下步骤:

  1. 在对象检查器中选择 FDMemTable1。在 OI 底部,单击LoadFromFile链接,然后导航到 BDS Samples 数据文件夹(默认情况下,在 C:\Users\Public\Public Documents\Embarcadero\Studio\17.0\Samples\Data 中)并选择animal.fds . (选择那个没有具体原因,除了它有一个我们可以用来测试的数字字段。)

  2. 右键单击 DBGrid,然后选择Columns Editor,或单击 Object Inspector 中 DBGrid.Columns 属性上的省略号按钮。右键单击 Columns Editor 并选择Add all fields

  3. 选择SizeWeight列,展开它的Title属性,然后将Alignment设置为taRightJustify

  4. 运行应用程序。您在上面第 3 步中修改的列有一个右对齐的标题。(这里我使用了Size列。)

大小列标题右对齐的网格

于 2016-03-25T13:34:07.623 回答
2

下面的代码在西雅图对我有用。我使用的是 TClientDataSet 而不是 TFDMemTable,但我看不出这会有什么不同。

如果您在 DBGrid 上定义了持久列,您还可以通过 Object Inspector 设置列的标题对齐方式 - 使用它来选择列,然后展开其 Title 节点,您可以在那里设置标题对齐方式。

procedure TForm1.CDS1AfterOpen(DataSet: TDataSet);
var
  i : Integer;
begin
  for i := 0 to DBGrid1.Columns.Count - 1 do
    DBGrid1.Columns[i].Title.Alignment := taRightJustify;
end;

顺便说一句,如果你认为你在 OI 中设置了对齐但它被忽略了,看看你是否能找出原因,如下所示:

  • 确保您的表单已保存,然后右键单击它并选择View as text. 然后,在 IDE 编辑器窗口中,您可以查看 Alignment 属性是否按照您在 OI 中指定的方式保存。使用编辑器上下文菜单返回以表单形式查看表单。

  • 正如我在评论中描述的那样,添加表单的 Loaded 方法的覆盖。inherited使用in主体上的断点,您可以在调用Loaded之前和之后检查 Alignment 值。inherited

为什么我建议调查Loaded?嗯,它在表单从 DFM 流入后被调用,并且是运行时系统完成设置表单的例程。有时,诚然很少,另一个组件(通常是第 3 方组件)行为不端并导致其他组件的属性出现奇怪的行为。

于 2016-03-25T08:07:13.587 回答