ASP.net Gridview Auto刷新时滚动到底部,如果滚动条位置在刷新前位于底部

时间:2014-06-23 17:24:27

标签: asp.net gridview scroll

我有一个从txt文件读取的ASP.net gridview。在刷新时,它保持滚动条位置。

当前维护滚动位置代码:

<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);


function pageLoaded(sender, args) {

    Func()

}
function Func() {//document.getElementById("hdnScrollTop").value
    document.getElementById("divScroll").scrollTop = document.getElementById("hdnScrollTop").value;
}
function Func2() {
    var s = document.getElementById("divScroll").scrollTop;

    document.getElementById('hdnScrollTop').value = s;

}

问题: 当滚动位置位于当前底部时,我希望它在刷新时转到新的底部。我怎么能这样做呢?

附加代码

ScrollWAjax.aspx [pastebin]

ScrollWAjax.aspx.cs [pastebin]

其他可能的解决方案

  • 检查滚动条位置(如何?),如果在底部则滚动顶部= 500(发送到底部)
  • 检查是否单击了滚动条(如何?),如果单击则不刷新。否则scrolltop = 500

3 个答案:

答案 0 :(得分:0)

如果我没弄错的话,你正在做一个ajax电话。因此,您可以订阅endrequest,您可以在其中设置新的滚动位置。

prm.add_endRequest(endRequestHandler);
prm.add_beginRequest(beginRequestHandler);

var scrolledToBottom = false;

function beginRequestHandler(sender, args){
    if($("#pnlGrid").scrollTop() + $("#pnlGrid").innerHeight() >= $("#pnlGrid").prop("scrollHeight")) {
        scrolledToBottom  = true;
    }
}

function endRequestHandler(sender, args) {
    if(scrolledToBottom){
        $("#pnlGrid").scrollTop($("#pnlGrid").prop("scrollHeight"));
    }
}

答案 1 :(得分:0)

以下是如何做到这一点。此代码假定您的gridview周围有一个面板pnlgrid。这需要引用jquery文件。

function pageLoad(sender, args) {
  if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
  }
}

function BeginRequestHandler(sender, args) {
     xPos = $get('pnlgrid').scrollLeft;
     yPos = $get('pnlgrid').scrollTop;
}

function EndRequestHandler(sender, args) {
    $get('pnlgrid').scrollLeft = xPos;
    $get('pnlgrid').scrollTop = yPos;
}

请告诉我,如果这不是您正在寻找的内容,但提供更多信息,我将很乐意为您提供帮助。

答案 2 :(得分:0)

我意识到一个简单的解决方案。分隔符有一个onmousedown和onmouseup属性,我在mousedown上使用这些函数,然后停止计时器并启动计时器。这解决了现在当有人点击滚动条时它停止计时器并且不刷新的问题。当他们放手时,它会恢复计时器,该计时器设置为转到页面底部: - )

function startTimer() {
    var timer = $find("<%=Timer1.ClientID%>")
    timer._startTimer();
    Func();
}

function stopTimer() {
    var timer = $find("<%=Timer1.ClientID%>")
    timer._stopTimer();
}