2014-02-18 46 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,而是低于此值。 –