问题是这样的撒....我现在要做的项目呢..他的数据量灰常的大..可能一个DGV要显示10W数据.也不夸张....无奈之下..(当然让他自己去加载10W.开国际玩笑呢) 我手动模仿滚动条. 用滚动条控件...但是不给劲啊....
滚动条控件之外.我还得模仿鼠标滚轮..这些我都做完拉....不给力在哪里呢...不给力在.我模仿的这个东西他有时候会不即时(因为先滚动了这边的滚动条控件.我再去把DGV 的ROW清空.再添加)
我想问的问题呢..就是. 有木有什么办法.让我控制这DGV的滚动条重写这个控件啊..什么的.都不是问题.问题是我没有这个经验.我应该如何重载.重载什么东西..我看过.貌似DGV自带的滚动条他不允许重载.或者是我没找到..我必须得控制到DGV它自带滚动条的大小..获取他的所在位置.就是他的VALUE. 然后获取他的SCROLL事件.动态去加载数据..谁有经验.能说下..很急..谢谢了

解决方案 »

  1.   

    分页,
    每页显示固定的数目,winform也是
    你的滚动条问题就消失了
      

  2.   

    datagridview不是有 虚拟模式么
    http://www.cnblogs.com/qingteng1983/archive/2010/05/09/1730905.html
      

  3.   

    分页的存储过程:create proc PageNum
    @PageSize int, --每页显示条数
    @PageIndex int, --当前是第几页
    @totalRows int output, --总行数
    @totalPages int output --总页数
    as
    declare @startId int
    declare @endId int
    set @startId = @PageSize*(@PageIndex-1)+1
    set @endId = @startId+@PageSize-1
    select @totalRows=COUNT(*) from Books
    set @totalPages=@totalRows/@PageSize
    if(@totalRows%@PageSize != 0) --如果总行数除每页显示数据量的值不等于0,则总页数得加1
    begin
    set @totalPages=@totalPages+1
    end
    declare @IndexTable table(Id int identity(1,1) ,nId int)
    insert into @IndexTable select Id from Books
    select * from @IndexTable as t ,Books as b where t.Id>=@startId and t.Id<=@endId and t.nId=b.Id
    go
     
    declare @tr int --总行数
    declare @tp int --总页数
    exec PageNum 4,2,@tr output ,@tp output
    print '这是总页数'+convert(varchar,@tp) --数据转换
    print @tr   
      

  4.   

    按照我的想法,其实楼主不必非要自个控制滚动条吧
    只要更改了DGV的CurrentCell属性(必须较之前有所变化),DGV的滚动条就会自动滚动,使当前的数据行得以呈现,相当于间接控制了滚动条
      

  5.   

    winform的东西自己没怎么做过分页。有时候加载100万条也很正常。
    用户自己拉滚动条去找是的。
      

  6.   

    大家没听明白意思吧..或者说没有做过大数据量的?.
    说的是10W条.但是仅仅加载20条.就是我用DGV的DEFAULTROW.HEIGHT 与DGV.HEIGHT算出来当前页面会显示几行数据.然后动态去查询仅仅数十条数据显示
    所谓的10W条.是总数据量.但问题是我必须让DGV的SCROLLBAR显示有10W数据.
    客户拖动滚动条.判断SCROLLBAR.TYPE是否为ENDSCROLL 然后判断SCROLL.VALUE.得到当前数据的位置. 查询数据库 得到当前页的几十条数据..
    现在大家清楚了么?我已经用SCROLLBAR控件成功模仿此做法.30W数据加载很随意....(听懂的人立马知道.10000W都随意)但是该做法会有延迟.我想知道DGV的自带SCROLLBAR是否能够控制.如果能!.就成了!加载1E我都敢做!
      

  7.   

    感谢您的回答.我尝试过虚拟模式.但是问题也有.我为了减少服务器压力(瞬间查询几十万数据不可能的..WEBSERVICE做服务器XML有1G左右.我们测试过.2条数据7KB.)该方式放弃了..请问您还知道其他的么?我们软件说白了.就是全国性的.通用的一个信息共享资料库.大家都会用到.然后都查询等等.不是公司内部的什么ERP OA CRM之类的..所以对于服务器压力也是要考虑的.
    顶多只能瞬间查询100撑死...做个数据缓存之类的..其实我的方法就是动态分页.
    只是我想控制到DGV自带的SCROLLBAR而已.我用SCROLLBAR已经模仿到了上下页按钮首页末页等..
      

  8.   

    这个,完全要走偏门了,dataGrid的模式不适合,自定义控件吧...
    你的SCROLLBAR建立10W数据的滚动量,然后动态计算SCROLLBAR的位置,加载前100和后100条数据...不过说真的,那个客户傻成这样,要这样的浏览界面,10W数据逐一看?等着返工吧...
      

  9.   

    弱弱的问一下啊,C#控件不用自己做滚动条啊。举个例子啊,直接把一个DataGridView放到一个Form里,DataGridView的Dock属性设置为Fill,Form的AutoScroll属性设置为True。就搞定所有问题了。
      

  10.   

    如果用我手上这个js封装控件就好办了,可以实现了,但不建议LZ这样做,用分页多省事。