关于c#:水平滚动与使用DataGridView的excel相似

horizontal scrolling similar to that of excel using DataGridView

DataGridView可以在交错的庄园(类似于Excel)中水平滚动。

我不需要沿列单元格滚动(连续),而是当滚动到达单元格边界时,网格应滚动下一列单元格。


您可以覆盖OnScroll方法并计算下一个偏移量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    protected override void OnScroll(ScrollEventArgs e)
    {
        if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
        {
            e.NewValue = GetColumnOffset(e.NewValue);;
        }
        base.OnScroll(e);
    }

    private int GetColumnOffset(int offset)
    {
        int start = 0, end = 0;
        foreach (var column in Columns.Cast<DataGridViewColumn>().Where(c=>!c.Frozen))
        {
            end = start + column.Width;
            if (start <= offset && offset < end)
            {
                break;
            }
            start = end;
        }
        return start == offset ? offset : end;
    }

尝试使用FirstDisplayedScrollingColumnIndex属性。 应该有帮助。 如果设置FirstDisplayedScrollingColumnIndex,它将跳转到指定列索引的开头。

就像是:

1
2
3
protected override void OnScroll(ScrollEventArgs e) {
    base.OnScroll(e);
    this.FirstDisplayedScrollingColumnIndex = Convert.ToInt32(this.HorizontalScrollBar.Value / this.Width); }