设置 gridView.FirstDisplayedScrollingRowIndex 时获取 "No room is available to display rows"

Getting "No room is available to display rows" when setting gridView.FirstDisplayedScrollingRowIndex

gridView.FirstDisplayedScrollingRowIndex = gridView.SelectedRows[0].Index;

爆炸:

No room is available to display rows

DataGridView是未绑定模式下的自定义控件。 datagridview.FirstDisplayedScrollingRowIndex 未在特定的基于数据网格视图的事件中设置。

通过 DataSet.EndMerge 上的 gatagridview.Rows.Add 方法将行添加到 datagridview,然后逐行设置单元格样式和格式。最后选择的行被清除并恢复,滚动条位置恢复到第一个可见行。

正在尝试找出此异常的实际含义。

if (gridView.Rows.Count > 0)
{
    gridView.ClearSelection();

    T value = GetItemByRow(gridView.Rows[0]);

    bool isVisible = filter.ShouldShow(value);
    gridView.Rows[0].Selected = true;

    if (!isVisible)
    {
        gridView.Rows[0].Visible = true;
        gridView.FirstDisplayedScrollingRowIndex = gridView.SelectedRows[0].Index; 
        gridView.Rows[0].Visible = false;
    }
    else
    {
        gridView.FirstDisplayedScrollingRowIndex = gridView.SelectedRows[0].Index;
    }
}

当网格中存在行但不可见时,将其设置为第一行将使其抛出此异常。

当网格自动调整为 0 高度(或可能宽度)并且您设置时

dataGridView.FirstDisplayedScrollingRowIndex = 0;

将抛出异常。我们的网格已设置 Dock = Fill,并且在某些情况下被调整为不可见。

我们的修复是将 MinimumSize 设置为 100/50,我们再也没有看到异常。即使网格不在 window 内(因此不可见),现在也不会抛出异常。