Winforms 在1小时内将DataGridViewRow移动1厘米

Winforms 在1小时内将DataGridViewRow移动1厘米,winforms,datagridview,scroll,Winforms,Datagridview,Scroll,对于WinFormDataGridView,我要做的是在1小时内将行上下移动1厘米。我在谷歌上搜索了一下,但找不到任何能给我线索的东西。更具体地说,假设我在机器上打开了一个表单,其中DataGridView中填充了数据。如果我在1小时后查看DataGridView,它应该向上/向下移动1厘米。移动的方式应该是用户甚至不会意识到,并且在单击/选择单元格/行时不会出现任何问题 有人能告诉我从哪里开始,我如何实现这一点吗 注意:网格将保持原样。仅一行在1小时内上升/下降1厘米。 谢谢 MChicago

对于WinFormDataGridView,我要做的是在1小时内将行上下移动1厘米。我在谷歌上搜索了一下,但找不到任何能给我线索的东西。更具体地说,假设我在机器上打开了一个表单,其中DataGridView中填充了数据。如果我在1小时后查看DataGridView,它应该向上/向下移动1厘米。移动的方式应该是用户甚至不会意识到,并且在单击/选择单元格/行时不会出现任何问题

有人能告诉我从哪里开始,我如何实现这一点吗

注意:网格将保持原样。仅一行在1小时内上升/下降1厘米。 谢谢
MChicago

此代码将使用计时器自动滚动DataGridView:要在一小时内移动1com,您必须通过实验找到正确的间隔值

    public partial class Form1 : Form
    {
        private readonly Timer tmr = new Timer();
        private int start;

        public Form1()
        {
            InitializeComponent();

            tmr.Interval = 100;
            tmr.Tick += scrollGrid;
            tmr.Enabled = true;

            List<DisplayItem> list = new List<DisplayItem>
                {
                    new DisplayItem("Apple"),
                    new DisplayItem("Orange"),
                    new DisplayItem("Banana"),
                    new DisplayItem("Grape")
                };
            // Make a long enough list to see the scrolling
            dgv.DataSource = list.Concat(list).Concat(list).ToList();
        }    

        private void scrollGrid(object sender, EventArgs e)
        {
            PropertyInfo verticalOffset = dgv.GetType()
               .GetProperty("VerticalOffset", BindingFlags.NonPublic | 
                                              BindingFlags.Instance);


            start += 1;
            verticalOffset.SetValue(this.dgv, start, null);
        }

        private class DisplayItem
        {
            public DisplayItem(string s)
            {
                this.Value = s;
            }

            public string Value { get; set; }
        }
    }
公共部分类表单1:表单
{
专用只读计时器tmr=新计时器();
私人int启动;
公共表格1()
{
初始化组件();
tmr.间隔=100;
tmr.Tick+=滚动网格;
tmr.Enabled=true;
列表=新列表
{
新的DisplayItem(“苹果”),
新的DisplayItem(“橙色”),
新的DisplayItem(“香蕉”),
新的显示项(“葡萄”)
};
//制作足够长的列表以查看滚动
dgv.DataSource=list.Concat(list).Concat(list.ToList();
}    
私有void scrollGrid(对象发送方、事件参数e)
{
PropertyInfo verticalOffset=dgv.GetType()
.GetProperty(“垂直偏移量”,BindingFlags.NonPublic)
BindingFlags.Instance);
开始+=1;
verticalOffset.SetValue(this.dgv,start,null);
}
私有类显示项
{
公共显示项(字符串s)
{
该值=s;
}
公共字符串值{get;set;}
}
}

感谢Stuart提供的示例。我尝试了代码,过了一段时间后移动了整行。我需要有一个平滑的滚动。因此,一旦定时器被触发,它应该移动行,例如,让我们只移动行的1/20。