datagridview autoscroll若隐藏了某些行?

时间:2015-09-16 13:35:57

标签: c# winforms datagridview

我正在对已经安装了一些自动滚动代码的Datagridview进行修改。:

            // snap to most recent entry
            if (cnt > 0)
            {
                this.Invoke(new MethodInvoker(delegate()
                {
                    dgvLog.ClearSelection();
                    dgvLog.FirstDisplayedScrollingRowIndex = dgvLog.Rows.Count - 1;

                    dgvLog.Invalidate();
                }));   
             }

但是,此Datagridview上有一个复选框列,代表"内部"与#34;外部"记录条目。

并且用户已经要求过滤Datagridview的方法,以便他们可以查看EITHER外部条目或内部条目...或(默认)两者。所以,我已经为此创建了一组单选按钮。按钮只是循环遍历行,检查布尔值,并设置每一行。可见为true或false。那些看起来效果很好。

然而,当我过滤Datagridview只显示"内部"条目,我会得到一个例外:

System.InvalidOperationException:FirstDisplayedScrollingRowIndex属性不能设置为不可见的行。

知道在设置FirstDisplayedScrollingRowIndex属性时如何考虑行可见性?在我的谷歌搜索工作中找不到多少。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用以下

int lastRow = dgvLog.Rows.GetLastRow(DataGridViewElementStates.Visible);
if (lastRow >= 0)
    dgvLog.FirstDisplayedScrollingRowIndex = lastRow;

答案 1 :(得分:0)

我相信您可以使用DataGridView的FirstDisplayedCell.RowIndex属性。

来自文档:

  

获取或设置当前在DataGridView中显示的第一个单元格;通常,此单元格位于左上角。

像这样使用:

var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;

我没有自我测试,因为我没有IDE可以提供