有没有办法让其固定在当前显示列
8 个解决方案
#1
修改列宽或列显示顺序,列出你的修改方式
#2
dgv.ScrollBars = ScrollBars.Vertical; // 把dataGridView的水平滚动条隐藏后
鼠标拖动修改列宽,就会自动滚到第一列
#3
试试
int index = dataGridView2.FirstDisplayedScrollingRowIndex;
dataGridView2.ScrollBars = ScrollBars.Vertical;
dataGridView2.FirstDisplayedScrollingRowIndex = index;
#4
谢谢你的回复,这不行,主要是拖动列时HScrollBar是隐藏的,Grid会滚动到第一列
获取的FirstDisplayedScrollingColumnIndex也是0的。
在Scroll事件可以捕获到Grid会从当前位置滚到0
我正在想办法取消这种由修改列宽所引起的Scroll但不影响正常Scroll
#5
从我的一个干净的dataGridView试验发现,dataGridView2.ScrollBars = ScrollBars.Vertical;调整ScrollBars的滚动条样式会导致dataGridView回滚到第一行,期间很可能发生了dataGridView重绘。那么第一行index的目的其实就是在重绘发生前先记录下当前位置,以便在重绘后复原到该位置,我在干净的dataGridView实测是可以得。但你的dataGridView可能受到你写的其他事件或代码的影响,没有呈现出一个干净的dataGridView在调整ScrollBars的滚动条样式立即就回到第一条的现象,所以只凭目前这点描述很难分析
#6
感谢关注,能否贴出重绘的事件及处理代码。
我现在的做法是这样的:
Scroll += (sender, e) =>
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll
&& e.NewValue >= 0)
{
if (e.NewValue == 0)
{
var canScroll = !watch.IsRunning || watch.ElapsedMilliseconds > 200;
if (!canScroll)
{
e.NewValue = e.OldValue;
}
}
hScrollBar.Value = e.NewValue;
}
};
MouseUp += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (e.Location.Y <= ColumnHeadersHeight)
{
watch.Reset();
watch.Start();
}
}
};
MouseClick += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (e.Location.Y <= ColumnHeadersHeight)
{
watch.Reset();
watch.Start();
}
}
};
#7
重绘是系统执行,不知代码。能否给出一个简单的form代码用于试验?
#8
按上面的代码已经解决问题了
原代码地址
http://www.codeproject.com/Articles/51889/Summary-DataGridView
但这份代码有我所讲的问题,加上上面的代码就可以解决了:)
#1
修改列宽或列显示顺序,列出你的修改方式
#2
dgv.ScrollBars = ScrollBars.Vertical; // 把dataGridView的水平滚动条隐藏后
鼠标拖动修改列宽,就会自动滚到第一列
#3
试试
int index = dataGridView2.FirstDisplayedScrollingRowIndex;
dataGridView2.ScrollBars = ScrollBars.Vertical;
dataGridView2.FirstDisplayedScrollingRowIndex = index;
#4
谢谢你的回复,这不行,主要是拖动列时HScrollBar是隐藏的,Grid会滚动到第一列
获取的FirstDisplayedScrollingColumnIndex也是0的。
在Scroll事件可以捕获到Grid会从当前位置滚到0
我正在想办法取消这种由修改列宽所引起的Scroll但不影响正常Scroll
#5
从我的一个干净的dataGridView试验发现,dataGridView2.ScrollBars = ScrollBars.Vertical;调整ScrollBars的滚动条样式会导致dataGridView回滚到第一行,期间很可能发生了dataGridView重绘。那么第一行index的目的其实就是在重绘发生前先记录下当前位置,以便在重绘后复原到该位置,我在干净的dataGridView实测是可以得。但你的dataGridView可能受到你写的其他事件或代码的影响,没有呈现出一个干净的dataGridView在调整ScrollBars的滚动条样式立即就回到第一条的现象,所以只凭目前这点描述很难分析
#6
感谢关注,能否贴出重绘的事件及处理代码。
我现在的做法是这样的:
Scroll += (sender, e) =>
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll
&& e.NewValue >= 0)
{
if (e.NewValue == 0)
{
var canScroll = !watch.IsRunning || watch.ElapsedMilliseconds > 200;
if (!canScroll)
{
e.NewValue = e.OldValue;
}
}
hScrollBar.Value = e.NewValue;
}
};
MouseUp += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (e.Location.Y <= ColumnHeadersHeight)
{
watch.Reset();
watch.Start();
}
}
};
MouseClick += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (e.Location.Y <= ColumnHeadersHeight)
{
watch.Reset();
watch.Start();
}
}
};
#7
重绘是系统执行,不知代码。能否给出一个简单的form代码用于试验?
#8
按上面的代码已经解决问题了
原代码地址
http://www.codeproject.com/Articles/51889/Summary-DataGridView
但这份代码有我所讲的问题,加上上面的代码就可以解决了:)