我正在製作一個.NET 4 WinForms應用程序,它從數據庫讀取數據並在DGV中顯示行。但是行數大於一次可以放入屏幕的最大行數。要顯示所有數據,我需要自動滾動DGV直到最後一行,然後更新數據源以刷新DGV。每個像素滾動DataGridView
我發現它很容易做到這一點,只需通過一個遞增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滾動順暢,但它並沒有得出下面那些人看見在開始任何行。
有沒有什麼辦法可以讓它順利滾動並正確顯示數據?
你試過在滾動後調用'Invalidate()'嗎? –
@KingKing只是做了,'dgv.Invalidate()'的行爲一樣'dgv.Refresh()'會,重置垂直滾動偏移量爲0。 –
很難平滑滾動'DataGridView',這不是因爲'ScrollBars',這是因爲** DataGridView呈現其單元格**,通常我們不需要這種平滑的滾動,但我同意在某些情況下需要它。 –