我有一个Gridview,其行数多于屏幕上显示的行数而不滚动。 我将此添加到页面指令:
MaintainScrollPositionOnPostback="true"
当我在特定行上单击编辑/更新/删除页面保持滚动位置时,这非常有用。
但是,Gridview还启用了具有多个页面链接的分页。 当我更改页面时,页面将滚动位置保持在页面底部。
我希望在页面之间切换时跳转到页面顶部。 但是,我仍然希望它在上面描述的行动作编辑/更新/删除时保持滚动位置。
非常感谢任何帮助!
答案 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";
}