我正在对已经安装了一些自动滚动代码的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属性时如何考虑行可见性?在我的谷歌搜索工作中找不到多少。
谢谢!
答案 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可以提供