Gridview分页/滚动

时间:2014-06-03 17:20:12

标签: c# asp.net gridview scroll paging

我有一个Gridview,其行数多于屏幕上显示的行数而不滚动。 我将此添加到页面指令:

MaintainScrollPositionOnPostback="true"

当我在特定行上单击编辑/更新/删除页面保持滚动位置时,这非常有用。

但是,Gridview还启用了具有多个页面链接的分页。 当我更改页面时,页面将滚动位置保持在页面底部。

我希望在页面之间切换时跳转到页面顶部。 但是,我仍然希望它在上面描述的行动作编辑/更新/删除时保持滚动位置。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

此解决方案可能适合您,找到here。基本上你正在处理RowDataBound事件以确定用户何时进行分页,如果是,则滚动到顶部。

<强>使用Javascript:

// Scroll to the top of the Page
function ScrollToTop() {
  window.scrollTo(0,0);
}

代码背后:

Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
      ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)

  If e.Row.RowType.Equals(DataControlRowType.Pager) Then
  Dim pTableRow As TableRow = _
         CType(e.Row.Cells(0).Controls(0).Controls(0), TableRow)
  For Each cell As TableCell In pTableRow.Cells
    For Each control As Control In cell.Controls
      If TypeOf control Is LinkButton Then
        Dim lb As LinkButton = CType(control, LinkButton)
        lb.Attributes.Add("onclick", "ScrollToTop();")
      End If
    Next
  Next
End If
End Sub

我尝试转换为C#:

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
  if (e.Row.RowType.Equals(DataControlRowType.Pager)) {
    TableRow pTableRow = (TableRow)e.Row.Cells[0].Controls[0].Controls[0];
    foreach (TableCell cell in pTableRow.Cells) {
        foreach (Control control in cell.Controls) {
            if (control is LinkButton) {
                LinkButton lb = (LinkButton)control;
                lb.Attributes.Add("onclick", "ScrollToTop();");
            }
        }
    }
  }
}

答案 1 :(得分:0)

这是我放在一起的解决方案:

在.aspx文件中添加:

<script>
    function ScrollToTop() {
        if (<%=(Scroll)%>) {
            window.scrollTo(0, 0);
        }
    }
</script>

...

<body onload="ScrollToTop()">

...

<asp:GridView ID="GridView1 OnPageIndexChanged="GridView1_PageIndexChanged"

...


在代码隐藏的.aspx.cs文件中添加:

    protected string Scroll;

    protected void Page_Load(object sender, EventArgs e)
    {
        Scroll = "false";
        Page.MaintainScrollPositionOnPostBack = true;
    }

    protected void GridView1_PageIndexChanged(Object sender, EventArgs e)
    {
        Scroll = "true";
    }