Прокрутка PAST в нижней строке DataGridView - PullRequest
2 голосов
/ 04 ноября 2010

Существует ли какое-либо свойство или метод для установки вертикальной позиции прокрутки DataGridView после нижней строки?

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

DataGridView scrolled to bottom row

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

DataGridView scrolled beyond bottom row

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Насколько я знаю, нет никакого способа сделать это, кроме как развернуть собственную команду для отображения данных.

1 голос
/ 04 июля 2011

Как насчет использования Panel с желаемым размером и большим DataGridView внутри, а также перемещения внутреннего содержимого с собственным ScrollBar?

DataGridView можно изменить по формуле:

dataGridView1.Height =
    // Total height of all rows
    dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.None) +
    // Panel visible height
    panel1.ClientSize.Height;

Полный пример:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.Columns.Add("Test1", "Test1");
            dataGridView1.Columns.Add("Test2", "Test2");

            dataGridView1.Rows.Add("abc", "10");
            dataGridView1.Rows.Add("def", "20");
            dataGridView1.Rows.Add("ghi", "30");
            dataGridView1.Rows.Add("jkl", "40");
            dataGridView1.Rows.Add("mno", "50");
            dataGridView1.Rows.Add("pqr", "60");
            dataGridView1.Rows.Add("stu", "70");
            dataGridView1.Rows.Add("vwx", "80");
            dataGridView1.Rows.Add("yza", "90");

            UpdatePanel();
        }

        void UpdatePanel()
        {
            dataGridView1.Height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.None) + panel1.ClientSize.Height;
            vScrollBar1.Minimum = 0;
            vScrollBar1.Maximum = dataGridView1.Height - panel1.ClientSize.Height;
        }

        private void panel1_Resize(object sender, EventArgs e)
        {
            UpdatePanel();
        }

        private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            dataGridView1.Top = -vScrollBar1.Value;
        }
    }
}

Example form

Альтернативный и более простой способ: установите для свойства панели AutoScroll значение true, но это решение имеет некоторые ошибки прокрутки(Сбрасывает положение, когда фокус возвращается).Может быть, у этой ошибки есть обходной путь.

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