1

我正在制作一个 .NET 4 WinForms 应用程序,它从数据库中读取数据并在 DGV 中显示行。但是,行数大于一次可以在屏幕上显示的最大行数。要显示所有数据,我需要自动滚动 DGV 直到最后一行,然后更新数据源以刷新 DGV。

我发现通过简单地增加FirstDisplayedScrollingRowIndex一很容易做到这一点。但是滚动太锐利了。我希望它能够顺利滚动。

为此,我尝试ScrollRows直接调用方法。该方法不是公开的,所以我不得不像这样使用反射:

var scrollRows = dgv.GetType().GetMethod("ScrollRows", BindingFlags.Instance | BindingFlags.NonPublic);
scrollRows.Invoke(dgv, new object[] { 1, -1, ScrollEventType.SmallIncrement });

timer_Tick我从每 20 毫秒触发一次的方法中调用此代码。

DGV 平滑滚动,但它不会在开始时可见的行下方绘制任何行。

有什么办法可以使它平滑滚动并正确显示数据?

4

2 回答 2

1

您需要将您的 DGV 添加到 Panel

于 2014-03-17T09:50:05.480 回答
0

我已经放弃了对 DGV 的需求,因此也放弃了这种方法。我创建了一个 FlowLayoutPanel,其中包含动态创建的面板以显示所需的数据,并按照我想要的方式进行设计。

可能有一种方法可以执行 DataGridView 的平滑滚动,这可以通过分析 DataGridView 代码的 .NET 反射来完成,但同样,我找到了一个可接受的替代方案并且我正在使用它。

有一种方法可以通过将 DGV 实际放置在带有滚动条的面板上来实现平滑滚动。这样,滚动面板也会滚动 DGV。这种方式对我来说并不方便,因为 DGV 标题会滚出屏幕,我需要它们始终可见。

于 2014-04-04T08:42:11.687 回答