procedure TForm2.Button1Click(Sender: TObject);
begin
  cxGrid1TableView1.DataController.RecordCount := 2;


  var
  APeriodIndex, ADistanceIndex, AOrbitsIndex, ANameIndex: Integer;
//...
  //Indexes to access values in particular columns
  APeriodIndex := 0;
  ADistanceIndex := 1;
  ANameIndex := 2;
  AOrbitsIndex := 3;
  with cxGrid1TableView1.DataController do
  begin
    BeginUpdate;
    try
      //the first record
      Values[0, APeriodIndex] := 87;
      Values[0, ADistanceIndex] := 57910;
      Values[0, ANameIndex] := 'Mercury';
      Values[0, AOrbitsIndex] := 'Sun';
      //the second record
      Values[1, APeriodIndex] := 365;
      Values[1, ADistanceIndex] := 149600;
      Values[1, ANameIndex] := 'Earth';
      Values[1, AOrbitsIndex] := 'Sun';
    finally
      EndUpdate;
    end;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Add('FocusedRecordIndex:' + cxGrid1TableView1.DataController.FocusedRecordIndex.ToString);
  Memo1.Lines.Add('FocusedDataRowIndex:' + cxGrid1TableView1.DataController.FocusedDataRowIndex.ToString);
  Memo1.Lines.Add('FocusedRowIndex:' + cxGrid1TableView1.DataController.FocusedRowIndex.ToString);
  Memo1.Lines.Add('-------------------');
end;

image

image
image

在 Delphi 的 Developer Express cxGrid 组件中,FocusedRecordIndexFocusedDataRowIndexFocusedRowIndex 是用于访问和操作表格中当前聚焦(或高亮)行的不同方面的属性。这些属性虽然听起来相似,但它们有不同的用途和含义。以下是一个表格,展示了这些属性之间的区别:

属性名称 描述 用途
FocusedRecordIndex 表示当前聚焦记录在数据集(如 TDataSet)中的索引。 当你需要根据数据集中的记录索引来执行操作时非常有用。
FocusedDataRowIndex 表示当前聚焦行在 cxGrid 内部数据行集合中的索引。这个索引是基于 cxGrid 视图(TcxGridTableView)的行集合。 当你需要在 cxGrid 的行集合中直接定位或操作行时非常有用。注意,这个索引可能不对应于数据集中的实际记录索引,特别是在使用分组、排序或过滤时。
FocusedRowIndex 表示当前聚焦行在 cxGrid 视图(TcxGridTableView)中的可视行索引。这个索引考虑了所有可视行,包括数据行、组行、摘要行等。 当你需要获取或操作 cxGrid 中当前可视行的位置时非常有用。这个索引通常用于视图级别的操作,如滚动、选择等。

以下是一些使用这些属性的示例场景:

  • FocusedRecordIndex:假设你有一个数据集,其中包含多个记录,并且你想要根据当前聚焦的记录索引来更新或删除该记录。你可以使用 FocusedRecordIndex 来获取这个索引,并据此操作数据集。

  • FocusedDataRowIndex:假设你在 cxGrid 中对行进行了分组或排序,并且你想要获取当前聚焦行在分组或排序后的行集合中的位置。你可以使用 FocusedDataRowIndex 来获取这个索引,并据此在 cxGrid 的行集合中定位或操作行。

  • FocusedRowIndex:假设你想要实现一个功能,当用户按下某个快捷键时,cxGrid 会滚动到当前聚焦行的位置。你可以使用 FocusedRowIndex 来获取当前聚焦行的可视索引,并据此控制 cxGrid 的滚动行为。


可见使用 FocusedRecordIndex 最好,因为 values 取值和 赋值也是 按这个来的,这个也不受界面排序的影响,是一开始就固定死的,没事那么多事,尤其不要混用;

posted on 2024-09-20 11:00  del88  阅读(11)  评论(0编辑  收藏  举报