使用DataGridViewAutoSizeRowsMo​​de.DisplayedCells时,Datagridview无法正确滚动到底行

时间:2014-02-18 11:44:57

标签: c# winforms datagridview scroll

我正在使用WinForms DataGridView来显示不同数量的数据。当使用更大的数量时,我注意到AutoSizing所有单元格导致无法接受的延迟,直到DataGridView响应(从几秒钟到几分钟)。将DataGridViewAutoSizeRowsMo​​de属性设置为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没有设置为我给出的值,无论出于何种原因。

有没有人知道如何解决这个问题或者我可能在那里做错了什么?

1 个答案:

答案 0 :(得分:1)

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

如果DataGridView内容在加载后没有更改,那么设置AutoSizeRowsMode属性是一种开销。在Load事件形式或数据绑定完成后,请调用DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells),调整大小只会执行一次。