我正在使用WinForms DataGridView来显示不同数量的数据。当使用更大的数量时,我注意到AutoSizing所有单元格导致无法接受的延迟,直到DataGridView响应(从几秒钟到几分钟)。将DataGridViewAutoSizeRowsMode属性设置为DisplayedCells而不是AllCells修复了该问题(3分钟 - > 5秒)。
但是现在我遇到了自动滚动到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没有设置为我给出的值,无论出于何种原因。
有没有人知道如何解决这个问题或者我可能在那里做错了什么?
答案 0 :(得分:1)
而不是DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells
使用DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.DisplayedCells)
方法。
如果DataGridView
内容在加载后没有更改,那么设置AutoSizeRowsMode
属性是一种开销。在Load
事件形式或数据绑定完成后,请调用DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells)
,调整大小只会执行一次。