问题描述
按照孟子E章的例子改了下我是绑定数据到gridview,可以实现上下滚动,但是怎么实现一个滚动完成后,就显示实时更新的数据呢,例如:原数据100条滚动1到100这期间我增加或者修改了数据,在第二次循环的时候就要事实刷新出来更新的数据或者增加了数据就从1滚动到102条,不知道这个刷新怎么改呢?]-------------------------------------------------------------------------------------------后台-------------------------------------------------------------------------------------------publicpartialclass_Default:System.Web.UI.Page{publicOleDbConnectiongetConn(){stringupload_file=Server.MapPath("/data/");stringconnstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+System.Web.HttpContext.Current.Server.MapPath("~/data\th.mdb")+";PersistSecurityInfo=False";OleDbConnectionopenac=newOleDbConnection(connstr);return(openac);//openac.Open();}protectedvoidPage_Load(objectsender,EventArgse){//g.DataSource=GetData();//g.DataBind();g.DataSource=null;databing();}publicvoiddatabing(){try{stringsqlstr="select*fromfxdt";OleDbConnectionconn=getConn();conn.Open();OleDbDataAdapterda=newOleDbDataAdapter();da.SelectCommand=newOleDbCommand(sqlstr,conn);DataSetds=newDataSet();da.Fill(ds,"fxdt");g.DataSource=ds;g.DataKeyNames=newstring[]{"id"};//主键g.DataBind();conn.Close();}catch(Exceptione){throw(newException("数据库出错:"+e.Message));}}}-------------------------------------------------------------------------------------------前台-------------------------------------------------------------------------------------------<htmlxmlns="http://www.w3.org/1999/xhtml"><headid="Head1"runat="server"><metahttp-equiv="Pragma"content="no-cache"/><metahttp-equiv="Cache-Control"content="no-cache"/><metahttp-equiv="Expires"content="0"/><title></title><styletype="text/css">.blk_02{margin-top:4px;}.blk_02.table_titletable{border-left:1pxsolid#b3d3ec;border-top:1pxsolid#b3d3ec;background:#e0f0fd;color:#5198cc;}.blk_02.table_titletableth{border-right:1pxsolid#b3d3ec;border-bottom:1pxsolid#b3d3ec;height:24px;font-weight:normal;text-align:center;}.blk_02.table_data{height:1000px;overflow:auto;}.blk_02.table_datatable{border-left:1pxsolid#b3d3ec;}.blk_02.table_datatabletd{border-right:1pxsolid#b3d3ec;border-bottom:1pxsolid#b3d3ec;height:24px;font-weight:normal;text-align:center;}</style></head><body><formid="form1"runat="server"><divclass="blk_02"id="chg"><divclass="table_title"><tablewidth="885"cellspacing="0"><tbody><tr><thwidth="20%">航班号</th><thwidth="20%">始发地</th><thwidth="50px">目的地</th><thwidth="50px">计划飞</th></tr></tbody></table></div><divclass="table_data"id="demo"><divid="demo1"><asp:GridViewID="g"runat="server"AutoGenerateColumns="false"ShowHeader="false"Font-Size="12px"CellPadding="3"Width="885"><Columns><asp:TemplateFieldItemStyle-Width="20%"><ItemTemplate><%#Eval("hbh")%></ItemTemplate></asp:TemplateField><asp:TemplateFieldItemStyle-Width="20%"><ItemTemplate><%#Eval("sfd")%></ItemTemplate></asp:TemplateField><asp:TemplateFieldItemStyle-Width="50px"><ItemTemplate><%#Eval("mdd")%></ItemTemplate></asp:TemplateField><asp:TemplateFieldItemStyle-Width="50px"><ItemTemplate><%#Eval("jhf")%></ItemTemplate></asp:TemplateField></Columns></asp:GridView></div></div></div><script>varspeed=30functionMarquee(){if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight){document.getElementById("demo").scrollTop=0;}else{document.getElementById("demo").scrollTop++}}varMyMar=setInterval(Marquee,speed)document.getElementById("demo").onmouseover=function(){clearInterval(MyMar)}document.getElementById("demo").onmouseout=function(){MyMar=setInterval(Marquee,speed)}</script></form></body></html>
解决方案
解决方案二:
刷新页面吧,骚年,想来signalR和js、ajax之类的目前对你来讲也太困难了
解决方案三:
引用1楼starfd的回复:
刷新页面吧,骚年,想来signalR和js、ajax之类的目前对你来讲也太困难了
-----------------------是的,是的,嘿嘿,但是自动滚动的话,在哪里设置滚动完刷新呢?前台,还是后台?
解决方案四:
document.getElementById("demo").scrollTop=0;下面加个js刷新代码
解决方案五:
滚动到头的时候加个刷新吧
解决方案六:
说白了,就是一个js滚到,判断滚动条到底部,然后通过ajax访问后台读取数据,然后拼接html到前台来展现。
解决方案七:
引用5楼hanjun0612的回复:
说白了,就是一个js滚到,判断滚动条到底部,然后通过ajax访问后台读取数据,然后拼接html到前台来展现。
请问,这个页面我想放两个gridview各自滚动各自的内容。能实现么?
解决方案八:
引用1楼starfd的回复:
刷新页面吧,骚年,想来signalR和js、ajax之类的目前对你来讲也太困难了
请问,这个页面我想放两个gridview各自滚动各自的内容。能实现么?
解决方案九:
既然document.getElementById("demo").scrollTop++这条语句是你写的,那么你就应该在这里扩展你的逻辑。
解决方案十:
引用3楼starfd的回复:
document.getElementById("demo").scrollTop=0;下面加个js刷新代码
确实可以在这里修改逻辑。不过一般来说,在加载数据时跳回“头”部去了,好像有点不合情理。一把来说,当你在执行document.getElementById("demo").scrollTop++的时候要判断是否“接近”那个if判断条件了,比如说按照120像素高做判断:if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight)-120;
这个条件成立就立刻异步加载新数据。在加载数据时你可以让marquee暂停滚动,或者不暂停滚动也可以。
解决方案十一:
嗯,把上面的120改为20,似乎更合理一点。离底部距离120像素就加载数据,有点早。改为20更好一下,根据你的marquee滚动速率来判断。
解决方案十二:
引用7楼ahya的回复:
Quote: 引用1楼starfd的回复:
刷新页面吧,骚年,想来signalR和js、ajax之类的目前对你来讲也太困难了请问,这个页面我想放两个gridview各自滚动各自的内容。能实现么?
应该没问题
解决方案十三:
引用9楼sp1234的回复:
Quote: 引用3楼starfd的回复:
document.getElementById("demo").scrollTop=0;下面加个js刷新代码确实可以在这里修改逻辑。不过一般来说,在加载数据时跳回“头”部去了,好像有点不合情理。一把来说,当你在执行document.getElementById("demo").scrollTop++的时候要判断是否“接近”那个if判断条件了,比如说按照120像素高做判断:if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight)-120;
这个条件成立就立刻异步加载新数据。在加载数据时你可以让marquee暂停滚动,或者不暂停滚动也可以。
-------------------------------------------------<script>functionmyrefresh(){window.location.reload();}varspeed=30functionMarquee(){if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight){document.getElementById("demo").scrollTop=0;myrefresh();}else{document.getElementById("demo").scrollTop++}}varMyMar=setInterval(Marquee,speed)document.getElementById("demo").onmouseover=function(){clearInterval(MyMar)}document.getElementById("demo").onmouseout=function(){MyMar=setInterval(Marquee,speed)}</script>上面这个可以实现当初始数据gridview表格超出设定的外部大小后,就在外部定义的区间内滚动,可以每滚完一次,刷新出一次新数据但是,现在如果初始数据gridview的内容没超出外部空间,此时不滚动,这时如果后台加入数据grid表格内容超出外部空间后,还是不滚动。。求助,怎么判断并滚动刷新呢?
解决方案十四:
引用11楼hanjun0612的回复:
Quote: 引用7楼ahya的回复:
Quote: 引用1楼starfd的回复:
刷新页面吧,骚年,想来signalR和js、ajax之类的目前对你来讲也太困难了请问,这个页面我想放两个gridview各自滚动各自的内容。能实现么?
应该没问题
----------------还得麻烦您下-----------------<script>functionmyrefresh(){window.location.reload();}varspeed=30functionMarquee(){if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight){document.getElementById("demo").scrollTop=0;myrefresh();}else{document.getElementById("demo").scrollTop++}}varMyMar=setInterval(Marquee,speed)document.getElementById("demo").onmouseover=function(){clearInterval(MyMar)}document.getElementById("demo").onmouseout=function(){MyMar=setInterval(Marquee,speed)}</script>上面这个可以实现当初始数据gridview表格超出设定的外部大小后,就在外部定义的区间内滚动,可以每滚完一次,刷新出一次新数据但是,现在如果初始数据gridview的内容没超出外部空间,此时不滚动,这时如果后台加入数据grid表格内容超出外部空间后,还是不滚动。。求助,怎么判断并滚动刷新呢?
解决方案十五:
引用3楼starfd的回复:
document.getElementById("demo").scrollTop=0;下面加个js刷新代码
<script>functionmyrefresh(){window.location.reload();}varspeed=30functionMarquee(){if(document.getElementById("demo").scrollTop>=document.getElementById("demo1").offsetHeight-document.getElementById("demo").offsetHeight){document.getElementById("demo").scrollTop=0;myrefresh();}else{document.getElementById("demo").scrollTop++}}varMyMar=setInterval(Marquee,speed)document.getElementById("demo").onmouseover=function(){clearInterval(MyMar)}document.getElementById("demo").onmouseout=function(){MyMar=setInterval(Marquee,speed)}</script>上面这个可以实现当初始数据gridview表格超出设定的外部大小后,就在外部定义的区间内滚动,可以每滚完一次,刷新出一次新数据但是,现在如果初始数据gridview的内容没超出外部空间,此时不滚动,这时如果后台加入数据grid表格内容超出外部空间后,还是不滚动。。求助,怎么判断并滚动刷新呢?
解决方案:
在滚动事件里,应该先去后台查看是否有数据更新,有的话,需要改变你的滚动条高度document.getElementById("demo").scrollTop=0;因为第一次没有数据,所以滚动条被你赋值0了,你需要在重新赋值一下