gpt4 book ai didi

delphi - 当 RowCount > VisibleRowCount 且未选择网格的第一行时,哪个数据集行出现在 DBGrid 的最上面行?

转载 作者:行者123 更新时间:2023-12-03 15:00:32 24 4
gpt4 key购买 nike

当基础数据集中的记录数为大于 DBGrid 中显示的行数,并且 DBGrid 已滚动。

这是我的问题。从附加到 DBGrid 的拖/放事件处理程序中,我可以使用 MyGrid.MouseCoord(X,Y).Y 确定放置事件与 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 和网格中可见的行号之间只有一个偏移量,您就可以从 protected 成员 Row 和 TopRow 中获取所需的信息,这些信息可以由类帮助程序访问。像这样的事情:

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

关于delphi - 当 RowCount > VisibleRowCount 且未选择网格的第一行时,哪个数据集行出现在 DBGrid 的最上面行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com