Сенсорный экран-DataGridView не прокручивается до конца

У меня есть приложение, работающее на сенсорном экране. В нем у меня есть DataGridView, и у меня есть эта проблема:

Когда я скрутил его с помощью сенсорного экрана он не идет до конца.

Когда я скрутил его с помощью мыши он идет до конца.

Так как мой последний сенсорный экран, связанный вопрос не получил много любви или ответа, я сделал видео, чтобы лучше продемонстрировать свою проблему: ссылка на видео

Как вы можете видеть, когда я использую сенсорный экран, отсутствует запись, и когда я иду на панель scrool с помощью мыши, как DataGridView добавляет другую запись. Это произошло с более чем 1 строкой.

Есть предложения ?

Информация:

Приложение работает на win 10.
Сделано в .net (c#) (framework 4)

РЕДАКТИРОВАТЬ:

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

            int totalHeight = 0;
            foreach (DataGridViewRow row in dataGridView1.Rows)
                totalHeight += row.Height;

            MessageBox.Show("Total H: " + totalHeight.ToString() + " Height: " + dataGridView1.Height.ToString() + " VO: " + dataGridView1.VerticalScrollingOffset);

            if (totalHeight - dataGridView1.Height < dataGridView1.VerticalScrollingOffset)
            {
                int diferenca = dataGridView1.RowCount - (dataGridView1.FirstDisplayedScrollingRowIndex + dataGridView1.DisplayedRowCount(false));

                MessageBox.Show("Diferenca- " + diferenca.ToString() + "RowCount- " + dataGridView1.RowCount + "Soma- " + (dataGridView1.FirstDisplayedScrollingRowIndex + dataGridView1.DisplayedRowCount(false)));

                if (diferenca != 0)
                {
                    dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.FirstDisplayedScrollingRowIndex + diferenca;
                }
            }

2 ответа

  1. Попробуйте это, это работает для меня:

        private void dgv_Scroll(object sender, ScrollEventArgs e)
        {
            if (e.NewValue > e.OldValue && dgv.RowCount - 1 == (dgv.DisplayedRowCount(false) + dgv.FirstDisplayedScrollingRowIndex))
                dgv.FirstDisplayedScrollingRowIndex = dgv.RowCount - 1;
        }
    

    также в некоторых случаях я использую:

            private void dgv_Scroll(object sender, ScrollEventArgs e)
        {
            DataGridView dgv = (sender as DataGridView);
            int hidenRows = (dgv.RowCount) - (dgv.DisplayedRowCount(false) + dgv.FirstDisplayedScrollingRowIndex);
    
            if (e.NewValue > e.OldValue && hidenRows < dgv.DisplayedRowCount(false))
                dgv.FirstDisplayedScrollingRowIndex = dgv.RowCount - 1;
        }