我正在创建一个.NET 4 WinForms应用程序,它从数据库中读取数据并在DGV中显示行。但是,行数大于可以同时适合屏幕的最大行数。要显示所有数据,我需要自动滚动DGV直到最后一行,然后更新数据源以刷新DGV。
我发现只需将FirstDisplayedScrollingRowIndex
增加一个即可轻松完成。
然而,滚动太尖锐。我希望它顺利滚动。
为此,我尝试直接调用ScrollRows
方法。那个方法不公开,所以我不得不像这样使用Reflection:
var scrollRows = dgv.GetType().GetMethod("ScrollRows", BindingFlags.Instance | BindingFlags.NonPublic);
scrollRows.Invoke(dgv, new object[] { 1, -1, ScrollEventType.SmallIncrement });
我从timer_Tick
方法调用此代码,该方法每20毫秒触发一次。
DGV平滑滚动,但它不会在开头可见的行下面画任何一行。
有什么方法可以让它顺利滚动并正确显示数据吗?
答案 0 :(得分:0)
您需要将DGV添加到Panel
答案 1 :(得分:0)
我已经放弃了对DGV的需求,因此也采用了这种方法。我创建了一个FlowLayoutPanel,其中动态创建了Panel,以按照我希望的方式设计所需的数据。
可能有一种方法可以执行DataGridView的平滑滚动,这可以通过分析DataGridView代码的.NET反射来实现,但同样,我找到了一个可接受的替代方案,并且我正在使用它。
有一种方法可以通过将DGV实际放置在带有滚动条的面板上来实现DGV的平滑滚动。这样,滚动面板也会滚动DGV。这种方式对我来说不方便,因为DGV标题会滚出屏幕,我需要它们始终可见。