Datagridview FirstDisplayedScrollingRowIndex не работает в нижней части сетки - PullRequest
3 голосов
/ 22 марта 2012

Для прокрутки сетки данных я использую следующий код:

dataGridView1.FirstDisplayedScrollingRowIndex = currentRowIndexInGridView;
dataGridView1.Update();

Это прекрасно работает для строк, которые не находятся в нижней части сетки. Если я использую его для нижних строк, то установщик не устанавливает его на желаемое значение, когда я проверяю его во время отладки. Например. Я устанавливаю FirstDisplayedScrollingRowIndex = 103, но после назначения FirstDisplayedScrollingRowIndex имеет значение 90 и, следовательно, нужная строка не видна. С определенной точки он останавливается, и я не вижу последние 5 строк. Если я добавляю новые строки и настраиваю их для отображения, он прокручивается на одну, но последние 5 строк я больше не вижу.

Я думаю, что это как-то связано с тем, что некоторые из моих строк имеют разную высоту, и некоторые внутренние оценки DisplayedRowCount не выполняются ???

Есть ли способ обнаружения этой ситуации и затем принудительной прокрутки к нижней части сетки данных?

EDIT:

Важная часть сеттера FirstDisplayedScrollingRowIndex выглядит следующим образом в Reflector:

 if (value > this.displayedBandsInfo.FirstDisplayedScrollingRow)
        {
            int rows = this.Rows.GetRowCount(DataGridViewElementStates.Visible, this.displayedBandsInfo.FirstDisplayedScrollingRow, value);
            this.ScrollRowsByCount(rows, (rows > 1) ? ScrollEventType.LargeIncrement : ScrollEventType.SmallIncrement);
        }
        else
        {
            this.ScrollRowIntoView(-1, value, true, false);
        }

Кажется, ошибка в вычислении переменной rows.

Ответы [ 2 ]

2 голосов
/ 16 июля 2012

Мне пришлось заставить все строки иметь одинаковую ширину, иначе установщик

FirstDisplayedScrollingRowIndex

глючит.

2 голосов
/ 22 марта 2012

Вызывать следующий метод при добавлении новой строки

    private void Autoscroll()
    {            

        if (dgv.FirstDisplayedScrollingRowIndex + dgv.DisplayedRowCount(false) < dgv.Rows.Count)
        {
            dgv.FirstDisplayedScrollingRowIndex += dgv.DisplayedRowCount(false);
        }
        else
        {
            dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1;
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...