DataGridView(winform)在隐藏水平滚动条时,修改列宽或列显示顺序,都会自动跳到第一行

CSDNFucker 2016-02-19 09:14:13
DataGridView(winform)在隐藏水平滚动条时,修改列宽或列显示顺序,都会自动跳到第一行
有没有办法让其固定在当前显示列
...全文
696 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDNFucker 2016-02-19
  • 打赏
  • 举报
回复
引用 7 楼 xdashewan 的回复:
重绘是系统执行,不知代码。能否给出一个简单的form代码用于试验?
按上面的代码已经解决问题了 原代码地址 http://www.codeproject.com/Articles/51889/Summary-DataGridView 但这份代码有我所讲的问题,加上上面的代码就可以解决了:)
xdashewan 2016-02-19
  • 打赏
  • 举报
回复
引用 6 楼 CSDNFucker 的回复:
感谢关注,能否贴出重绘的事件及处理代码。
重绘是系统执行,不知代码。能否给出一个简单的form代码用于试验?
CSDNFucker 2016-02-19
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
从我的一个干净的dataGridView试验发现,dataGridView2.ScrollBars = ScrollBars.Vertical;调整ScrollBars的滚动条样式会导致dataGridView回滚到第一行,期间很可能发生了dataGridView重绘。那么第一行index的目的其实就是在重绘发生前先记录下当前位置,以便在重绘后复原到该位置,我在干净的dataGridView实测是可以得。但你的dataGridView可能受到你写的其他事件或代码的影响,没有呈现出一个干净的dataGridView在调整ScrollBars的滚动条样式立即就回到第一条的现象,所以只凭目前这点描述很难分析
感谢关注,能否贴出重绘的事件及处理代码。 我现在的做法是这样的:

            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();
                    }
                }
            };
xdashewan 2016-02-19
  • 打赏
  • 举报
回复
引用 4 楼 CSDNFucker 的回复:
谢谢你的回复,这不行,主要是拖动列时HScrollBar是隐藏的,Grid会滚动到第一列 获取的FirstDisplayedScrollingColumnIndex也是0的。 在Scroll事件可以捕获到Grid会从当前位置滚到0 我正在想办法取消这种由修改列宽所引起的Scroll但不影响正常Scroll
从我的一个干净的dataGridView试验发现,dataGridView2.ScrollBars = ScrollBars.Vertical;调整ScrollBars的滚动条样式会导致dataGridView回滚到第一行,期间很可能发生了dataGridView重绘。那么第一行index的目的其实就是在重绘发生前先记录下当前位置,以便在重绘后复原到该位置,我在干净的dataGridView实测是可以得。但你的dataGridView可能受到你写的其他事件或代码的影响,没有呈现出一个干净的dataGridView在调整ScrollBars的滚动条样式立即就回到第一条的现象,所以只凭目前这点描述很难分析
CSDNFucker 2016-02-19
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:

int index = dataGridView2.FirstDisplayedScrollingRowIndex;
dataGridView2.ScrollBars = ScrollBars.Vertical;
dataGridView2.FirstDisplayedScrollingRowIndex = index;
谢谢你的回复,这不行,主要是拖动列时HScrollBar是隐藏的,Grid会滚动到第一列 获取的FirstDisplayedScrollingColumnIndex也是0的。 在Scroll事件可以捕获到Grid会从当前位置滚到0 我正在想办法取消这种由修改列宽所引起的Scroll但不影响正常Scroll
xdashewan 2016-02-19
  • 打赏
  • 举报
回复
引用 2 楼 CSDNFucker 的回复:
dgv.ScrollBars = ScrollBars.Vertical; // 把dataGridView的水平滚动条隐藏后 鼠标拖动修改列宽,就会自动滚到第一列
试试

int index = dataGridView2.FirstDisplayedScrollingRowIndex;
dataGridView2.ScrollBars = ScrollBars.Vertical;
dataGridView2.FirstDisplayedScrollingRowIndex = index;
CSDNFucker 2016-02-19
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
修改列宽或列显示顺序,列出你的修改方式
dgv.ScrollBars = ScrollBars.Vertical; // 把dataGridView的水平滚动条隐藏后 鼠标拖动修改列宽,就会自动滚到第一列
xdashewan 2016-02-19
  • 打赏
  • 举报
回复
修改列宽或列显示顺序,列出你的修改方式
内容概要:本文围绕“考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置”的Matlab代码实现展开,提出一种结合电能交互机制的双层优化模型,用于解决冷、热、电多能耦合背景下多微网系统的协同规划与运行问题。研究采用多场景分析方法应对可再生能源出力与负荷需求的不确定性,通过上层规划设备容量配置与下层优化多段运行策略的联动,提升系统在复杂环境下的经济性、鲁棒性与能源利用效率。所提供的Matlab代码集成了建模、求解(如YALMIP+CPLEX)与结果可视化全流程,涵盖场景生成与削减、双层优化结构设计及多能流协同调度等关键技术环节,为综合能源系统优化提供了完整的算法实现与技术参考。; 适合人群:具备电力系统、综合能源系统或优化建模背景,熟悉Matlab编程与数学规划方法,正在从事相关领域科研或工程设计工作的研究生、高校研究人员及能源行业技术人员。; 使用场景及目标:①开展冷热电联供(CCHP)多微网系统的容量规划与运行优化研究;②支撑含分布式能源、储能及多能转换设备的综合能源系统多目标、多场景优化建模;③学习与复现双层优化、分布鲁棒优化及场景分析等先进优化方法在能源系统中的实际应用。; 阅读建议:建议结合配套文献与代码同步研读,重点理解双层模型的构建逻辑、变量耦合关系与求解技巧,关注场景生成方法与YALMIP调用细节,通过调整参数、修改目标函数等方式进行仿真实验,以深化对系统优化机理的掌握。

8,832

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧