【问题标题】:datagridview autoscroll if some rows are hidden?如果某些行被隐藏,datagridview 自动滚动?
【发布时间】:2015-09-16 22:18:05
【问题描述】:

我正在对已经安装了一些自动滚动代码的 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 上有一个复选框列,表示“内部”与“外部”日志条目。

用户要求一种过滤 Datagridview 的方法,以便他们可以查看外部条目或内部条目......或(默认)两者。因此,我为此创建了一组单选按钮。按钮简单地遍历行,检查布尔值,并将每一行设置为真或假。这些似乎工作得很好。

但是,当我过滤 Datagridview 以仅显示“内部”条目时,我会得到一个异常:

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

知道在设置 FirstDisplayedScrollingRowIndex 属性时如何考虑行可见性吗?在我的谷歌搜索中没有找到太多东西。

谢谢!

【问题讨论】:

  • 好的,我想这可能会起作用?? dgvLog.ClearSelection;

标签: c# winforms datagridview


【解决方案1】:

使用下面的

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

【讨论】:

    【解决方案2】:

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

    来自文档:

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

    这样使用:

    var firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex;
    

    没有测试自己,因为我手头没有 IDE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-24
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 2015-11-16
      • 2014-09-23
      • 2016-01-30
      相关资源
      最近更新 更多