加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 当RowCount> VisibleRowCount没有选择网格的第一行

发布时间:2020-12-15 04:34:53 所属栏目:大数据 来源:网络整理
导读:当底层数据集中的记录数大于时,是否可以从DBGrid的最顶行中获取从基础数据集显示的行号,而不是最顶行是当前选定的行. DBGrid中显示的行数,并且已滚动DBGrid. 这是我的问题.从附加到DBGrid的拖放事件处理程序,我可以使用MyGrid.MouseCoord(X,Y).Y确定drop事件
当底层数据集中的记录数大于时,是否可以从DBGrid的最顶行中获取从基础数据集显示的行号,而不是最顶行是当前选定的行. DBGrid中显示的行数,并且已滚动DBGrid.

这是我的问题.从附加到DBGrid的拖放事件处理程序,我可以使用MyGrid.MouseCoord(X,Y).Y确定drop事件与DBGrid的哪个可见行相关联.当基础数据集包含的记录数小于或等于DBGrid中显示的行数时,此值也是基础数据集中关联记录的行号.

当基础数据集包含的记录多于DBGrid中可见行数时,MyGrid.MouseCoord(X,Y).Y和TDataSet(MyGrid.DataSource.DataSet).RecNo仅在数据集的第一行出现时相同在网格的第一行.

有没有办法在没有选择DBGrid行的情况下识别DBGrid中最顶层显示记录的基础数据集(或偏移量)中的记录号?我知道如果我实际上选择了DBGrid的最顶行,那么我可以使用TDataSet(MyGrid.DataSource.DataSet).RecNo来获取底层数据集的当前记录号.但是,从DBGrid.OnDragOver或DBGrid.OnDragDrop事件我只有DBGrid和鼠标坐标的引用(我可以从中确定网格的哪一行是放置的目标).

例如,如果我可以确定DBGrid在网格的最顶行中的基础数据集中显示第三条记录,我的问题就解决了.同样,如果我可以读取特定行的底层TField(例如,最顶行)而没有选择该行,我就拥有了我需要的东西.但是,我看不到这样做的方法.

任何建议将不胜感激.

编辑:我之前发布了一篇关于拖放到DBGrid的博客.有了这个新信息,我可以解决以前已知的问题.我将在本周的某个时候更新该博客,并且一旦我这样做,就会在这里添加一个指向该博客的链接.

还有一个问题.当可见行的数量小于基础记录的数量时,我们还需要计算在最后一个可见行之后发生的下降.在最后一个可见行之后删除时,MouseCoord(x,y).Y返回-1.

以下是对Uwe代码的修改,以实现这一目的:

function TDBGridHelper.RecNoFromVisibleRow(Value: Integer): Integer;
begin
  if Value = -1 then
  begin
    Result := DataSource.DataSet.RecNo - Row + TopRow + VisibleRowCount
  end
  else
  begin
    Result := DataSource.DataSet.RecNo - Row + TopRow + Value;
    if dgTitles in Options then
      Dec(Result);
  end;
end;

编辑:正如我在原始问题中提到的,我对这个答案很感兴趣,以便修复我的代码中实现拖放到DBGRid中的行为.有了这个答案,我已经更新了我的拖放行为,我在博客中写过这个更新.您可以在以下URL找到此讨论,包括原始博客文章的链接:Dragging and Dropping into a DBGrid Revisited

解决方法

只要DataSet.RecNo与网格中的可见rownumber之间只有一个偏移量,您就可以从受保护的成员Row和TopRow获取所需的信息,这些信息可以由类助手访问.像这样的东西:
function TDbGridHelper.RecNoFromVisibleRow(Value: Integer): Integer;
begin
  Result := DataSource.DataSet.RecNo - Row + TopRow + Value;
  if dgTitles in Options then
    Dec(Result);
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读