我的gridview里面的数据是通过time定时刷新的,右边和下面有滚动条
我想问下在我查看gridview的时候如何固定住滚动条,不受刷新时候的影响。
因为我time的时间间隔比较短,在查看的时候,gridview数据刷新,滚动条就会回到最上面
对我查看数据非常的不便。能不能在刷新的通知,固定好滚动条的位置。不知道如何实现。
希望各位知道能帮下忙哦
我想问下在我查看gridview的时候如何固定住滚动条,不受刷新时候的影响。
因为我time的时间间隔比较短,在查看的时候,gridview数据刷新,滚动条就会回到最上面
对我查看数据非常的不便。能不能在刷新的通知,固定好滚动条的位置。不知道如何实现。
希望各位知道能帮下忙哦
解决方案 »
- 谁能帮我看看关于CAB压缩文件的问题啊?
- 数据绑定
- ASp.NET 权限问题!!!急!!!
- Gridview 怎样根据选择的不同显示不同的内容?
- 利用js取得html传递过来的url 参数,使asp.net获得,怎么实现
- ASP.Net新手求救~关于受保护级别限制
- Infragistics的UltraWebGrid控件分组分页问题
- 110,急救!
- 获取客户端用户的 Windows 登录名(C#)
- 有无可能datagrid数据变化时不刷新显示
- 空间不支持ASP.NET会导致 显示需要更改web.config的“customErrors mode="Off"”吗
- Asp.Net中如何实现URL重写
的Updatepanel放置gridview
然后用Timer定时刷新页面
因为,浏览器更新后,你原来浏览记录的位置相对与GridView内部已经发生改变。
我推荐一种方法,添加两个控件:
一个如Button 点击后刷新GridView。
一个是提示控件,在Timer中,每一时间对数据库进行探测一次,如果有数据更新,就在提示控件中作出提示。这样,用户既能知道有记录更新,又可以选择性是否马上刷新页面而不影响当前查看。
element.scrollLeft
这样设置一下就没问题了
前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script type="text/javascript" language="javascript">
function RecordPostion(obj)
{
var div1 = obj;
var sx = document.getElementById('dvscrollX');
var sy = document.getElementById('dvscrollY');
sy.value = div1.scrollTop;
sx.value = div1.scrollLeft;
}
function GetResultFromServer()
{
var sx = document.getElementById('dvscrollX');
var sy = document.getElementById('dvscrollY');
document.getElementById('dvGridView').scrollTop = sy.value;
document.getElementById('dvGridView').scrollLeft = sx.value;
}
</script>
</head>
<body style="height:1500px">
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" >
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div id="dvGridView" style="height:400px; overflow:scroll" onscroll="javascript:RecordPostion(this);">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowHeader="false" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%#Eval("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="2000">
</asp:Timer>
</div>
<asp:HiddenField ID="dvscrollX" runat="server" />
<asp:HiddenField ID="dvscrollY" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>后台
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;public partial class _Default : System.Web.UI.Page
{
protected static DataTable dt1; protected static DataTable dt2; protected static int iFlag = 0; protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dt1 = new DataTable();
dt2 = new DataTable(); dt1.Columns.Add("Id", typeof(string));
dt1.Columns.Add("Name", typeof(string)); dt2.Columns.Add("Id", typeof(string));
dt2.Columns.Add("Name", typeof(string)); for (int i = 0; i < 100; i++)
{
DataRow dr1 = dt1.NewRow();
dr1["Id"] = i.ToString();
dr1["Name"] = "Jack_" + i.ToString();
dt1.Rows.Add(dr1);
} for (int j = 0; j < 200; j++)
{
DataRow dr2 = dt2.NewRow();
dr2["Id"] = j.ToString();
dr2["Name"] = "Tom_" + j.ToString();
dt2.Rows.Add(dr2);
}
}
} private void BindGridView()
{ if (iFlag % 2 == 1)
{
this.GridView1.DataSource = dt1;
}
else
{
this.GridView1.DataSource = dt2;
} this.GridView1.DataBind(); string sjs = "GetResultFromServer();"; ScriptManager.RegisterClientScriptBlock(this.GridView1, this.GetType(), "", sjs, true); } protected void Timer1_Tick(object sender, EventArgs e)
{
iFlag++; BindGridView();
}
}
69490741我的QQ号
我是在.ascx 用户控件中写代码的,代码运行没问题,但是实际运行时滚动条还是会置顶<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MainBody.ascx.cs" Inherits="MainBody" %>
<script type="text/javascript" language="javascript">
function RecordPostion(obj)
{
var div1 = obj;
var sx = document.getElementById('dvscrollX');
var sy = document.getElementById('dvscrollY');
sy.value = div1.scrollTop;
sx.value = div1.scrollLeft;
}
function GetResultFromServer()
{
var sx = document.getElementById('dvscrollX');
var sy = document.getElementById('dvscrollY');
document.getElementById('dvGridView').scrollTop = sy.value;
document.getElementById('dvGridView').scrollLeft = sx.value;
}
</script>
<asp:UpdatePanel ID="upd1" runat="server">
<ContentTemplate>
<div style="pasition:absolute;overflow: auto; height: 100px; width: 100%" runat="server">
<asp:GridView ID="AlarmGV" runat="server" CssClass="tablestyle"
align="center" Width="980px"
AutoGenerateColumns="False"
EmptyDataText="There are no data records to display.">
<Columns>
<asp:BoundField DataField="告警ID" HeaderText="告警ID" SortExpression="告警ID" />
<asp:BoundField DataField="信号名称" HeaderText="信号名称" SortExpression="信号名称" />
<asp:BoundField DataField="单位" HeaderText="单位" SortExpression="单位"/>
<asp:BoundField DataField="告警值" HeaderText="告警值" SortExpression="告警值"/>
<asp:BoundField DataField="告警时间" HeaderText="告警时间" SortExpression="告警时间"/>
<asp:BoundField DataField="通信状态" HeaderText="通信状态" SortExpression="通信状态"/>
<asp:BoundField DataField="当前状态" HeaderText="当前状态" SortExpression="当前状态"/>
<asp:BoundField DataField="告警类型" HeaderText="告警类型" SortExpression="告警类型"/>
<asp:BoundField DataField="结束值" HeaderText="结束值" SortExpression="结束值"/>
<asp:BoundField DataField="结束时间" HeaderText="结束时间" SortExpression="结束时间"/>
<asp:BoundField DataField="持续时间" HeaderText="持续时间" SortExpression="持续时间"/>
<asp:BoundField DataField="确认时间" HeaderText="确认时间" SortExpression="确认时间"/>
</Columns>
<PagerStyle HorizontalAlign="Center" />
<AlternatingRowStyle CssClass="altrowstyle" />
<HeaderStyle CssClass="headerstyle" />
<RowStyle CssClass="rowstyle" />
</asp:GridView>
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick" Enabled="false">
</asp:Timer>
</div>
<asp:HiddenField ID="dvscrollX" runat="server" />
<asp:HiddenField ID="dvscrollY" runat="server" />
</ContentTemplate>
<%-- <Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers> --%>
</asp:UpdatePanel> using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
using System.Data.Common;
using System.Data.SqlClient;public partial class MainBody : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
//this.SmartNavigation = true;
string cc;
string aa;
aa = "Server = " + MainVariable.h_DataSourse + ";Integrated Security = True;Database = " + MainVariable.h_Database;
cc = "select iAlarmID as 告警ID,sSigName as 信号名称,sUnit as 单位,sASigValue as 告警值,dASigDT as 告警时间,sSigSComm as 通信状态,"
+ "sASigStatus as 当前状态,sAType as 告警类型,sASigEndValue as 结束值,dASigEndDT as 结束时间,sALastT as 持续时间,dAffirm as 确认时间 "
+ "from RG_SIGINFO,RG_ALARM where iSID = iSigID and dRemove is null order by dASigDT desc";
SqlConnection themConnection = new SqlConnection(@aa);
SqlDataAdapter themAdpater = new SqlDataAdapter(cc, themConnection);
DataSet dnn = new DataSet();
themAdpater.Fill(dnn, "RG_SIGINFO,RG_ALARM");
AlarmGV.DataSource = dnn.Tables["RG_SIGINFO,RG_ALARM"].DefaultView;
AlarmGV.DataBind();
} protected void Timer1_Tick(object sender, EventArgs e)
{
string cc;
string aa;
aa = "Server = " + MainVariable.h_DataSourse + ";Integrated Security = True;Database = " + MainVariable.h_Database;
cc = "select iAlarmID as 告警ID,sSigName as 信号名称,sUnit as 单位,sASigValue as 告警值,dASigDT as 告警时间,sSigSComm as 通信状态,"
+ "sASigStatus as 当前状态,sAType as 告警类型,sASigEndValue as 结束值,dASigEndDT as 结束时间,sALastT as 持续时间,dAffirm as 确认时间 "
+ "from RG_SIGINFO,RG_ALARM where iSID = iSigID and dRemove is null order by dASigDT desc";
SqlConnection themConnection = new SqlConnection(@aa);
SqlDataAdapter themAdpater = new SqlDataAdapter(cc, themConnection);
DataSet dnn = new DataSet();
themAdpater.Fill(dnn, "RG_SIGINFO,RG_ALARM");
AlarmGV.DataSource = dnn.Tables["RG_SIGINFO,RG_ALARM"].DefaultView;
AlarmGV.DataBind(); string sjs = "GetResultFromServer();"; ScriptManager.RegisterClientScriptBlock(this.AlarmGV, this.GetType(), "", sjs, true);
}
}
现在就剩下这个问题了
不知道有没有高手指点下
我在前面说得应该很清楚了
最后的那位AngleProgrammer朋友给我的方法是可行的,我单独建立工程的时候也是可以实现的
但是,我把代码放到我的工程里面时,就出现了问题,提示SCRIPT里面的代码里面的参数不能为空
不知道是什么缘故。
希望知道的高手能帮助下
试试SetFocus 方法和 MaintainScrollPositionOnPostback 属性。
你的代码里好像没有调用RecordPostion(),所以dvscrollX dvscrolly里没有值吧
像我这种情况,RecordPostion应该怎么写
<div style="pasition:absolute;overflow:scroll; height: 100px; width: 100%" onscroll="javascript:RecordPostion(this);" runat="server">