2014-02-18 29 views
1

我正在使用WinForms DataGridView顯示不同數量的數據。當使用大量數據時,我注意到AutoSizing所有單元格會導致不可接受的延遲,直到DataGridView響應爲止(從幾秒到幾分鐘)。將DataGridViewAutoSizeRowsMo​​de屬性設置爲DisplayedCells而不是AllCells修復了這個問題(3分鐘 - > 5秒)。Datagridview在使用DataGridViewAutoSizeRowsMo​​de.DisplayedCells時無法正確滾動到底部行

但是現在我遇到了自動滾動到DGV內容底部的問題。 我試圖通過設置dgv.FirstDisplayedScrollingRowIndex = dgv.RowCount - 1; 以前工作得很好,但現在它只是滾動到最後一行之一,我不得不手動單擊向下滾動按鈕幾次,直到它實際顯示最後一行。拖動滾動條到底部感覺非常不順手,需要一些拖動才能到達最後一行。

我看別的地方有關該行的dgvAnalysis.CurrentCell設置爲一個單元,也試圖在DGV的滾動事件處理

private void dgv_Scroll(object sender, ScrollEventArgs e) 
{ 
     if (e.ScrollOrientation == ScrollOrientation.VerticalScroll) 
     { 
      dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
      dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; 
     } 
} 

以下但既不似乎幫助。似乎dgv.FirstDisplayedScrollingRowIndex沒有設置爲我給出的值,無論出於何種原因。

有沒有人有一個想法如何解決這個問題,或者我可能在那裏做錯了什麼?

回答

1

而不是DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells使用DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.DisplayedCells)方法。

如果DataGridView內容在加載後沒有改變,那麼設置AutoSizeRowsMode屬性是開銷。以Load事件的形式或者數據綁定完成後,調用DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells),調整大小將只進行一次。

+0

謝謝,但這並沒有幫助我解決我的問題。調整大小基本上沒有問題,只是它不會滾動到底部,因爲'FirstDisplayedScrollingRowIndex'未設置爲RowCount,而是低於此值。 –