2010-08-04 34 views
0

我有一个DataGridView有很多列,导致水平滚动条。但是,当我向右滚动并对列进行排序时,datagridview会稍微重新定位自身,但滚动条仍然保持在右侧。DataGridView排序重新定位网格的水平位置略

我想停止这种行为,并保持网格与网格排序前相同的位置,并且我希望继续在网格中使用自动排序(如果可能的话)。

我发现这个link和这个人有同样的问题,但是,提出的解决方案似乎并不适用,因为我没有进行手动排序。

有什么想法?

回答

1

我通过以下操作解决了这个问题。

我订阅了DataGridView.Scroll事件,如果ScrollOrientation是水平的,那么我将一个成员变量设置为滚动的NewValue。

然后我订阅了DataGridView.Sorted事件。在这个事件中,我将Horizo​​ntalScrollingOffset设置为成员变量。


int _horizontalOffsetStop; 

private void Grid_Scrolled(object sender, ScrollEventArgs e) 
{ 
    if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll) 
    { 
      _horizontalOffsetStop = e.NewValue; 
    } 
} 

private void Grid_Sorted(object sender, EventArgs e) 
{ 
    myGrid.HorizontalScrollingOffset = _horizontalOffsetStop; 
}