C#unity3d 判断鼠标悬停是否悬停在datagridview的(水平)滚动条上

实现winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 -
文俊IT社区 zuowenjun.cn
实现winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部
浏览(4661)
判断&DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为DataGridView控件添加Scroll事件,然后写入以下代码就可以了,应用范围:可实现分部加载数据,以提升用户体验!
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
if (e.NewValue + dataGridView1.DisplayedRowCount(false) == dataGridView1.Rows.Count)
MessageBox.Show(string.Format(&NewValue:{0}--OldValue:{1}--DisplayedRowCount:{2}&, e.NewValue, e.OldValue,dataGridView1.DisplayedRowCount(false)));
MessageBox.Show(&到底了,可以加载新数据了!&);
//这里面写加载数据的相关操作逻辑
如果你的项目中有很多的&DataGridView控件都需要应用该事件,那么以上的做法就显示有所繁琐,因为每个DataGridView控件都需要添加Scroll事件,且都需要写上面的判断代码,为了解决这个问题,如下我采用了为DataGridView控件扩展了一个RegistScrollToEndEvent方法,该方法的作用就是当你需要用到滚动到末尾时需触发的事件,那么你只需要提前将事件以参数的形式注入到指定的DataGridView控件中:
/// &summary&
/// 注册滚动条滚功到末尾时的处理事件
/// &/summary&
/// &param name=&grid&&&/param&
/// &param name=&onScrollToEnd&&&/param&
public static void RegistScrollToEndEvent(this DataGridView grid, EventHandler onScrollToEnd)
grid.Scroll += new ScrollEventHandler((sender, e) =&
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
if (e.NewValue + grid.DisplayedRowCount(false) == grid.Rows.Count)
if (onScrollToEnd != null)
onScrollToEnd(grid, null);
用法很简单:
dataGridView1.RegistScrollToEndEvent(dataGrid_OnScrollToEnd);
void dataGrid_OnScrollToEnd(object sender, EventArgs e)
MessageBox.Show(&load data!&);C#winform 中dataGridView信息被被盖住了为什么不显示滚动条 属性已经scrollBar 已经设置为Both_百度知道
C#winform 中dataGridView信息被被盖住了为什么不显示滚动条 属性已经scrollBar 已经设置为Both
我有更好的答案
之前我也出现过这样的问题,因为用的是公司封装的控件,还以为是公司控件的原因,找了好久也没找到解决的办法,最后无奈只有重新绑定了。没想到你也遇到这样的问题了,阿弥陀佛,重新绑定吧。
刚刚解决了!我起初不想让用户可以编辑,就把enable属性设置成false了,这就是根源啊,设成true就可以了!依然谢谢你啊
采纳率:37%
是不是因为你把dataGridView的AutoSizeColumnsMode设置成Fill了?你试试把它改成AllCells。你试试吧,之前我也有遇到过这种情况,因为是绑定数据库的表字段比较多,所以就出现这样的情况。
已经解决了,还是谢谢啊
为您推荐:
其他类似问题
scrollbar的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何判断 dataGridView 滚动条是否到底
[问题点数:20分]
如何判断 dataGridView 滚动条是否到底
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2017年7月 总版技术专家分月排行榜第二
2017年6月 总版技术专家分月排行榜第三
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2015年4月 荣获微软MVP称号2014年4月 荣获微软MVP称号
2014年12月 企业软件大版内专家分月排行榜第一2014年11月 企业软件大版内专家分月排行榜第一2014年7月 企业软件大版内专家分月排行榜第一2011年10月 企业开发大版内专家分月排行榜第一2011年5月 企业开发大版内专家分月排行榜第一2011年3月 企业开发大版内专家分月排行榜第一2010年12月 企业开发大版内专家分月排行榜第一2010年11月 企业开发大版内专家分月排行榜第一2010年9月 企业开发大版内专家分月排行榜第一2010年8月 企业开发大版内专家分月排行榜第一2010年7月 企业开发大版内专家分月排行榜第一2010年6月 企业开发大版内专家分月排行榜第一2010年5月 企业开发大版内专家分月排行榜第一
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|如何判断 dataGridView 滚动条是否到底
作者:用户
浏览:332 次
我的数据量很大有60万条一次全部从数据库加载到dataGridView会非常卡!而且用户查看的时候并不需要全部数据,我想一次加载3000条数据,如果用户把滚动条拉到最低再加载3000条,依次类推!现在
我的数据量很大有60万条一次全部从数据库加载到dataGridView会非常卡!而且用户查看的时候并不需要全部数据,我想一次加载3000条数据,如果用户把滚动条拉到最低再加载3000条,依次类推!现在不知道如何判断解决方案
解决方案二:你这个不是办法,最后加载太多还是会很卡不如做个分页正常的做法应该是做个查询功能,用户是按时间段查询还是某个字段来查询,只显示他想看的那部分数据,而不是将数据库里的数据都弄出来你现在是60w,还可以考虑分页要是6000W呢,光是读数据库这个操作,就能卡好几分钟.解决方案三:60w一次加载,内存这么宝贵的资源就这样浪费了。做个检索,用户根据需要查询显示的数据。解决方案四:引用楼主xifeng_520的回复:我的数据量很大有60万条一次全部从数据库加载到dataGridView会非常卡!而且用户查看的时候并不需要全部数据,我想一次加载3000条数据,如果用户把滚动条拉到最低再加载3000条,依次类推!现在不知道如何判断DataGridView.FirstDisplayedScrollingRowIndex获取或设置某一行的索引,该行是显示在DataGridView上的第一行。这个属性就可以了解决方案五:而且数据大到一定程度,就不是卡的问题了,直接内存不足解决方案六:60W一次加载?!goodjob解决方案七:你这种情况分页是必须的了,如果想再好一点的用户体验,把关键字抓出来,做个查询功能。多加搜索条件解决方案八:楼主悲哀了,都不是楼主想要的。。。。。。。。。。。。3楼似乎靠谱解决方案九:引用7楼xianfajushi的回复:楼主悲哀了,都不是楼主想要的。。。。。。。。。。。。3楼似乎靠谱不是楼主想要的就对了思路错误就应该从头改变,而不是按照错误的思路一路走到底仅仅满足解决目前的问题,是会出问题的解决方案十:或许我更支持楼主去实现他的想法,为什么?解决了当前问题,遇到新问题时,才能更进步.而且实现了现在的想法,将来说不定还能用得上.解决方案十一:dataGridView1_Scroll(objectsender,ScrollEventArgse)用这个事件可以做判断缓存处理解决方案十二:删除一部分,加载一部分,可以不用太过考虑内存问题,比如一次加载20000条数据每页1000条翻过第三页时可以考虑把之前的数据清空,在加载三页数据,不过这样做会影响服务器解决方案十三:你把数据排一下序就行了解决方案十四:了解一下的滚动条高度、滚动条顶部、页面高度的概念,就知道了。解决方案十五:如果滚动条高度减去滚动条顶部,接近(或者大于)GridView高度,那么就已经滚动到底部了,可以追加下一组数据了。解决方案:谢谢上面的回答!60万的数据量,自己拉滚动条查询本来就是很扯淡的事情!用户也就是拉这个东西玩玩儿!现在做的是一个政府部门的GIS项目,是为了实现这个效果,而实现这个功能.解决方案:做分页吧60W一次太耗资源了...我们做的系统就是弄的分页5W条数据100条一页再弄个搜索用户体验挺好的解决方案:还是做分页,你用滚动条判断,后面的数据还是越来越多。解决方案:引用14楼sp1234的回复:如果滚动条高度减去滚动条顶部,接近(或者大于)GridView高度,那么就已经滚动到底部了,可以追加下一组数据了。谢谢你的提示我用了下面的方法但是发现this.dataGridView.Height是个固定的值并不随着我添加数据变化?privateboolDgvScrollBarIsEnd(){inttag=0;if(this.dataGridView.ColumnHeadersVisible)tag=this.dataGridView.ColumnHeadersHeight+(this.dataGridView.Rows.Count*this.dataGridView.Rows[0].Height);elsetag=this.dataGridView.Rows.Count*this.dataGridView.Rows[0].Hif(tag&=this.dataGridView.Height)}解决方案:我用了下面的方法,但是有个问题this.dataGridView.Scroll-=newSystem.Windows.Forms.ScrollEventHandler(dataGridView_Scroll);这句意思是每次加载以后滚动条到底部我想每次加载以后,滚动条不到底,而是在上次的最后一行删掉这个语句以后拉动滚动条就停不下来一直加载?请大家帮忙看看//滚动条拖到底后加载数据privatevoiddataGridView_Scroll(objectsender,ScrollEventArgse){if(ScrollOrientation.VerticalScroll==e.ScrollOrientation&&e.NewValue==(this.dataGridView.RowCount-this.dataGridView.DisplayedRowCount(true))){this.dataGridView.Scroll-=newSystem.Windows.Forms.ScrollEventHandler(dataGridView_Scroll);AddData(attributeTable);this.dataGridView.FirstDisplayedScrollingRowIndex=this.dataGridView.RowCount-1;this.dataGridView.Scroll+=newSystem.Windows.Forms.ScrollEventHandler(dataGridView_Scroll);}}解决方案:可以参见我写的这篇:
【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备DataGridView中,用鼠标代替滚动条的有关问题 - C#当前位置:& &&&DataGridView中,用鼠标代替滚动条的有关问题DataGridView中,用鼠标代替滚动条的有关问题www.MyException.Cn&&网友分享于:&&浏览:220次DataGridView中,用鼠标代替滚动条的问题问题的详细描述: &
我用DataGridView显示数据库中的数据,但是出现了滚动条(水平和竖直),我想让滚动条消失,用鼠标来替代它的功能。最好鼠标的默认焦点在第一行(注意不是单元格,用一条线显示),鼠标滚动的时候,显示线跟着移动。请问代码怎么写?------解决方案--------------------
public void Form5_MouseWheel(object sender, MouseEventArgs e)
int index=dataGridView1.SelectedRows[0].I
System.Drawing.Point p = PointToScreen(e.Location);
if (WindowFromPoint(p.X, p.Y) == dataGridView1.Handle.ToInt32())
if (e.Delta == 120)
if (index &= 1)
dataGridView1.Rows[index - 1].Selected =
else if (e.Delta & 0)
dataGridView1.Rows[index + 1].Selected =
dataGridView1.Focus();
this.dataGridView1.FirstDisplayedScrollingRowIndex =//始终显示选中的行
private void dataGridView1_MouseEnter(object sender, EventArgs e)
this.MouseWheel += new MouseEventHandler(Form5_MouseWheel);
------解决方案--------------------
//Form.designer.cs里面在datagridview的地方加入鼠标滚轮事件
this.dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dataGridView1_MouseWheel);
private void dataGridView1_MouseWheel(object sender, MouseEventArgs e)
int rowIndex = this.dataGridView1.CurrentRow.I
this.dataGridView1.ClearSelection();
if (e.Delta & 0)
if (rowIndex & 0)
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex - 1].Cells[0];
this.dataGridView1.Rows[rowIndex - 1].Selected =
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
this.dataGridView1.Rows[rowIndex].Selected =
if (rowIndex & this.dataGridView1.Rows.Count - 1)
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex + 1].Cells[0];
this.dataGridView1.Rows[rowIndex + 1].Selected =
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[rowIndex].Cells[0];
this.dataGridView1.Rows[rowIndex].Selected =
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 datagridview鼠标定位 的文章

 

随机推荐