代码之家  ›  专栏  ›  技术社区  ›  Dan Tao

滚动到DataGridView的最后一行

  •  2
  • Dan Tao  · 技术社区  · 14 年前

    是否有设置垂直滚动位置的属性或方法 DataGridView

    我的意思是,说我有一个 数据表格控件

    DataGridView scrolled to bottom row

    我想能够 控件继续滚动,以便我可以在底部行下面显示一些灰色区域。我要找的可能是这样的:

    DataGridView scrolled beyond bottom row

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   giodamelio    14 年前

    据我所知,除了发布自己的自定义命令来显示数据之外,没有其他方法可以做到这一点。

        2
  •  1
  •   Dima Zorin    13 年前

    如何使用 Panel 具有所需尺寸和大尺寸 DataGridView 在里面,用自己的东西移动里面的东西 ScrollBar ?

    数据表格控件 可通过以下公式调整大小:

    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 ,但该解决方案有一些滚动错误(在焦点恢复时重置位置)。可能是那个虫子有办法解决。