水平滚动类似于使用DataGridView的excel

时间:2012-02-16 10:31:28

标签: c# datagridview

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

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

2 个答案:

答案 0 :(得分:1)

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

    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;
    }

答案 1 :(得分:0)

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

类似的东西:

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