Проверьте, прокручена ли сетка до конца

В текущем проекте мне нужно реализовать пользовательскую бесконечную прокрутку, а это означает, что когда пользователь прокручивает страницу вниз, чтобы последняя строка стала хотя бы частично видимой, мне нужно загрузить еще один объем данных из базы данных.

Проблема состоит в том, чтобы определить, видна ли последняя строка или нет. Пока я придумал следующее решение:

    gridView.TopRowChanged += GridView_TopRowChanged;

    private void GridView_TopRowChanged(object sender, EventArgs e)
    {
        var rowVisibleState = gridView.IsRowVisible(gridView.DataRowCount - 1);
        if (rowVisibleState == RowVisibleState.Visible 
            || rowVisibleState == RowVisibleState.Partially)
        {
            LoadData();
        }
    }

Это отлично работает, пока я не сгруппирую данные по любому столбцу.

введите здесь описание изображения

Как видно на картинке, прокрутка дошла до последней строки, но технически последняя строка все еще скрыта за заголовком группы.

Есть ли способ определить, достигла ли прокрутка нижней части независимо от того, сгруппированы данные или нет?


person Dmitry Volkov    schedule 13.07.2017    source источник


Ответы (1)


Вы можете работать непосредственно с вертикальной полосой прокрутки, чтобы сделать код более простым и надежным:

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        var scrollBar = gridControl1.Controls.OfType<VCrkScrollBar>().FirstOrDefault();
        scrollBar.Scroll += ScrollBar_Scroll;

    }

    private void ScrollBar_Scroll(object sender, ScrollEventArgs e) {

        if (e.NewValue == ((IScrollBar)sender).ViewInfo.VisibleMaximum) {
            LoadMoreData();
        }
    }

Кроме того, вы можете проверить параметр e.OldValue, чтобы проверить предыдущее состояние полосы прокрутки и направление прокрутки.

person Dmitrii Babich    schedule 13.07.2017