我有一个带有PageSize = 20(20行)的GridView,但它只显示10行而没有出现垂直滚动条.
我的问题是,当发生回发时,即使我选择了不同的行,它也会跳转到网格的顶行.我想滚动到所选行.我怎样才能做到这一点?
解决方法
在页面指令中添加MaintainScrollPositionOnPostback.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback ="true"%>
另一种方法,使用包装GridView的DIV的scrollTop方法:
private void ScrollGrid() { int intScrollTo = this.gridView.Selectedindex * (int)this.gridView.RowStyle.Height.Value; string strScript = string.Empty; strScript += "var gridView = document.getElementById('" + this.gridView.ClientID + "');\n"; strScript += "if (gridView != null && gridView.parentElement != null && gridView.parentElement.parentElement != null)\n"; strScript += " gridView.parentElement.parentElement.scrollTop = " + intScrollTo + ";\n"; ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"ScrollGrid",strScript,true); }
编辑:
由于以下几个原因,这不起作用:
1)如果gridView位于NamingContainer控件内,就像Panel一样,因为客户端的Id不是ClientId.您需要使用Teh控件的UniqueId.
2)你不能相信行高来计算滚动位置.如果任何列中的文本换行到多行,或者任何行包含的内容高于样式,则行的大小将不同
3)不同的浏览器可以有不同的行为.你最好使用jQuery scrollTop()和scroll()函数.要使用它们,必须在客户端使用scrollTop并设置可在服务器端读取的HiddenControl的值以重置位置.在客户端呈现行之前,您无法获得浏览器中行的高度.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。