在下面的代码中,我们对某些选定的行进行一些操作(不是删除)。
然而,有时,完成后,顶部选定的行会滚动,使其显示在网格下方 1/2 处。有没有办法避免这种滚动? (如果我的遍历下面选定行的代码由于某些不相关的原因不正确,我欢迎更正。)
Function TForm.DoSomethingToSelectedRows;
var
KeyAtStart: Integer;
begin
Result := TRUE;
KeyAtStart := DataSet.FieldByName('Key').AsInteger;
DataSet.DisableControls;
DataSet.First;
try
while Result AND (NOT DataSet.EOF) do DataSet
begin
if DBGrid1.SelectedRows.CurrentRowSelected then
Result := ... do something ...
fMPODataTls.GetDS.Next;
end;
finally
DataSet.Locate('Key', KeyAtStart, []); // re-position where we started
DataSet.EnableControls;
end;
end;
在循环访问数据集之前,您可以记下网格显示的顶行以及显示的总记录数。有了这些信息,在重新定位记录后,您可以通过移动到顶部或底部然后再次移回来将记录定位到确切的行。
您可以通过以下方式进行搬家MoveBy
s。不幸的是Row
and RowCount
的属性TDBGrid
受到保护,因此您必须使用众所周知的“受保护的黑客”。
有代码示例this回答并检查书签,这样您就不会得到错误的记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)