我有一个包含datagrid的aspx页面。此数据网格通过SQL查询填充在代码隐藏中,可以包含1到1000行。
用户可以单击每一行并编辑该行的数据。然而,一旦他们保存,数据网格就会滚动回到顶部,无论他们在哪里。我想在数据网格中保持滚动位置,以便用户可以轻松编辑下一行。我的aspx页面上有以下内容:
<script src="common.js" type="text/javascript"></script>
<script type = "text/javascript">
function setScroll(val) {
document.getElementById("hidscrollPos").value = val.scrollTop;
}
function scrollTo(what) {
document.getElementById(what).scrollTop =
document.getElementById("hidscrollPos").value;
}
</script>
<body MS_POSITIONING="GridLayout" onload="javascript:scrollTo('divDataGrid')">
<form id="form1" method="post" runat="server">
<asp:Panel ID="Panel4" style="left: 0px; position: absolute; top: 354px" runat="server">
<div id="divDataGrid" style="overflow:scroll;" onscroll="javascript:setScroll(this);">
<asp:DataGrid ID="grdItem" runat="server" AllowSorting="True"
AutoGenerateColumns="False" style="position: absolute; top: 50px"
CssClass="grdGrid" Font-Size="X-Small" GridLines="None" Width="97%"
Height="4px" CellPadding="1">
</asp:DataGrid>
</div>
</asp:Panel>
<input type="hidden" id="hidscrollPos" name="scrollPos" value="0" runat="server" />
</form>
</body>
在datagrid中,我定义了11个asp:TemplateColumns,我认为(希望?)与此问题无关。如果需要,我当然可以添加该代码。
我的.css文件有这个用于grdGrid:
.grdGrid
{
FONT-SIZE: 12px;
FONT-FAMILY: Verdana;
BACKGROUND-COLOR: white
}
我正在使用Visual Studio 2008和IE9。用户将使用IE8或IE9。
非常感谢任何帮助!
答案 0 :(得分:0)
可以将数据网格包装在UpdatePanel中吗?
答案 1 :(得分:0)
在我的头撞墙几个小时之后,我终于明白了。
上面发布的代码是正确的,并且完美无缺。问题是divDataGrid包含在另一个div中,并且THAT div有溢出:自动设置。所以我看到的滚动条来自那个div,而不是divDataGrid或grdItem。
一旦我删除了溢出:自上一个div的自动设置,一切都开始工作了。