在Delphi的TDBGrid中查找当前行

8
有没有办法找出TDBGrid中当前行的位置?

1
我认为您需要对您的问题提供一些澄清,您是指查询中的行还是DBGrid中的行? - Toby Allen
3个回答

5
您可以这样做:

1 - 定义一个本地类,它是TDBGrid的副本(这将让您访问私有方法):

type
  THackDBGrid = class(TDBGrid);

2 - 接着,您可以将其转换为本地定义的类,并从私有方法中提取,如下所示:

function TfrmMain.GetFieldValue(colnum : integer): string;
begin
  Result := THackDBGrid(grdMain).GetFieldValue(colnum);
end;

或者,获取行号:

function CurrentRowNumber: integer;
  Result := THackDBGrid(grdMain).Row;
end;

这个技巧在其他情况下也很有用,但我不能声称这是我自己的。我从这里学到了它。


这是一个很好的方法,可以绕过将所有内容放在一个文件中以访问祖先类的私有项的规则。 - Joseph Poirier

5

我不确定我是否理解了您的问题,但我会尝试回答,如果这不是您想问的,请您澄清一下。

TDBGrid与DataSource绑定,当前行与数据源中的当前行相同。您可以查询DataSource,通过查看主键值或RecNo属性来确定哪个记录是当前记录。


0

如果您不想依赖数据源提供记录计数和当前记录(例如,因为您正在远程服务器上使用单向游标),那么可以使用访问底层网格控件属性的技术。

请参见此答案以获取类似的StackOverflow问题的解决方案。


你开始说对了,但是你指出的链接只展示了如何获取记录数,而最重要的(RecNo或Row或CurrentRow等)无法直接从网格中获取。抱歉。 - Carlos B. Feitoza Filho
@Carlos:你为什么不写Row := TDummyGrid(MyDBGrid).Row而是RowCount := TDummyGrid(MyDBGrid).RowCount?需要一点思考,你知道的... - mghie
嗯...我想在我的网格上显示交替颜色,但是ROW属性在光标更改之间不是“持久的”,即,如果您在网格上向上或向下移动光标,更改选择,则所有可见行的ROW属性同时更改。我需要一种方法来单独识别每一行,而不受当前选定行的影响。现在我正在使用链接数据集的RecNo,但是在单向数据集上,此属性是无用的。正如您所看到的,需要一点思考,但是您却懒得去做。抱歉... - Carlos B. Feitoza Filho
1
@Carlos:你对网格行为的理解有所欠缺。交替颜色可以通过使用网格的事件参数来实现,其中包括要绘制的单元格的行和列。这与当前行或列无关。因为答案不适合你自己的问题(这与原始问题不同),所以对其进行负评是不恰当的。 - mghie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接