在页面上刷新数据的方法,通过源交替
Method of refreshing data on a page, alternating through sources
目前我只有一个网页,asp.net 和 c#,它从 SQL 服务器获取数据并将其显示在一个简单的图表中。返回的行数各不相同。
目标是让网页显示一小部分数据 x 秒,然后刷新页面以显示所有数据集的概览。数据是通过存储过程检索的,更改应该只发生在显示它的网页中。
我有什么
为了在页面加载时填充图表,我使用了以下内容:
public void PopulateGraph(int? channelID)
{
DataSet dsPzData = new DataSet();
dsPzData = oDb.pickingdata(channelID);
chtPzMonitor.DataSource = dsPzData.Tables[0];
chtPzMonitor.Series[0].YValueMembers = dsPzData.Tables[0].Columns[2].ColumnName;
chtPzMonitor.Series[0].AxisLabel= dsPzData.Tables[0].Columns[0].ColumnName;
chtPzMonitor.DataBind();
}
显示为:
<asp:Chart ID="chtPzMonitor" runat="server" Height="1013px" Width="1276px">
<series>
<asp:Series BackSecondaryColor="Red" ChartType="Bar"
Font="Microsoft Sans Serif, 35pt, style=Bold" IsValueShownAsLabel="false" CustomProperties="BarLabelStyle=Right"
Name="Series1">
</asp:Series>
</series>
<chartareas>
<asp:ChartArea Name="PZLabels">
<AxisY LabelAutoFitMaxFontSize="15" LabelAutoFitMinFontSize="8">
</AxisY>
<AxisX LabelAutoFitMaxFontSize="40" Interval="1">
</AxisX>
</asp:ChartArea>
</chartareas>
</asp:Chart>
问题
页面上的数据没有改变。除了原始站点的 <meta http-equiv="refresh" content="7"/>
标记外,图表上的数据似乎没有更新。
我试过的一个解决方案是使用一个计时器,我临时添加它以显示在标签上,它似乎也没有更新 - 或者它已更新但我尝试简单地重绘图表的方式不刷新它。
我试过的
我认为 运行 带有触发事件的计时器是实现此目的的最简单方法,因此我尝试了以下方法:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="5000" />
同时将图表包裹在 asp:UpdatePanel
和 ContentTemplate
标签中。我认为Timer1_tick方法很简单:
Int32 timeCount = 0;
protected void Timer1_Tick(object sender, EventArgs e)
{
channelID = Convert.ToInt32(Request.QueryString["ID"].ToString());
if (channelID < 1000)
{
timeCount += 1;
if (timeCount > 3)
{
timeCount = 0;
PopulateGraph(1000);
}
else
PopulateGraph(channelID);
}
}
ID 1000 是我要显示的 'overview' 页面,计数器使单通道数据显示 15 秒,然后我们打开概览 5 秒,然后再返回.
我也尝试过使用服务器端脚本作为 tick-method,但这似乎需要更广泛的重写,我正在努力避免。
我在这里遗漏了什么,或者我采用的方法太复杂而无法开始?如果有一个更简单的选项来交替重新加载页面,那么它也可以工作。
花了我一天的时间,但我想做的现在正在工作。
在.aspx文件中,我们在header中有<meta http-equiv="refresh" content="15" />
来刷新页面。
在body,我运行一个定时器。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="9000" />
此计时器会更新页面上的必要内容。
<asp:UpdatePanel ID="chartPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
<ContentTemplate>
(chart here)
</ContentTemplate>
</asp:UpdatePanel>
此图表通过 .aspx.cs:
中计时器的 tick 方法更新
protected void Timer1_Tick(object sender, EventArgs e)
{
PopulateGraph(1000);
}
1000 是从所有通道中提取信息的特殊情况,而不仅仅是用户给出的单个通道 - 操作员在现场使用此视图的方式是使用查询字符串定义通道,"?ID=1"
,例如。
此解决方案将原始通道信息在屏幕上保留 9 秒,然后计时器计时并使用新信息填充图形,6 秒后页面刷新为原始内容。
目前我只有一个网页,asp.net 和 c#,它从 SQL 服务器获取数据并将其显示在一个简单的图表中。返回的行数各不相同。
目标是让网页显示一小部分数据 x 秒,然后刷新页面以显示所有数据集的概览。数据是通过存储过程检索的,更改应该只发生在显示它的网页中。
我有什么
为了在页面加载时填充图表,我使用了以下内容:
public void PopulateGraph(int? channelID)
{
DataSet dsPzData = new DataSet();
dsPzData = oDb.pickingdata(channelID);
chtPzMonitor.DataSource = dsPzData.Tables[0];
chtPzMonitor.Series[0].YValueMembers = dsPzData.Tables[0].Columns[2].ColumnName;
chtPzMonitor.Series[0].AxisLabel= dsPzData.Tables[0].Columns[0].ColumnName;
chtPzMonitor.DataBind();
}
显示为:
<asp:Chart ID="chtPzMonitor" runat="server" Height="1013px" Width="1276px">
<series>
<asp:Series BackSecondaryColor="Red" ChartType="Bar"
Font="Microsoft Sans Serif, 35pt, style=Bold" IsValueShownAsLabel="false" CustomProperties="BarLabelStyle=Right"
Name="Series1">
</asp:Series>
</series>
<chartareas>
<asp:ChartArea Name="PZLabels">
<AxisY LabelAutoFitMaxFontSize="15" LabelAutoFitMinFontSize="8">
</AxisY>
<AxisX LabelAutoFitMaxFontSize="40" Interval="1">
</AxisX>
</asp:ChartArea>
</chartareas>
</asp:Chart>
问题
页面上的数据没有改变。除了原始站点的 <meta http-equiv="refresh" content="7"/>
标记外,图表上的数据似乎没有更新。
我试过的一个解决方案是使用一个计时器,我临时添加它以显示在标签上,它似乎也没有更新 - 或者它已更新但我尝试简单地重绘图表的方式不刷新它。
我试过的
我认为 运行 带有触发事件的计时器是实现此目的的最简单方法,因此我尝试了以下方法:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="5000" />
同时将图表包裹在 asp:UpdatePanel
和 ContentTemplate
标签中。我认为Timer1_tick方法很简单:
Int32 timeCount = 0;
protected void Timer1_Tick(object sender, EventArgs e)
{
channelID = Convert.ToInt32(Request.QueryString["ID"].ToString());
if (channelID < 1000)
{
timeCount += 1;
if (timeCount > 3)
{
timeCount = 0;
PopulateGraph(1000);
}
else
PopulateGraph(channelID);
}
}
ID 1000 是我要显示的 'overview' 页面,计数器使单通道数据显示 15 秒,然后我们打开概览 5 秒,然后再返回.
我也尝试过使用服务器端脚本作为 tick-method,但这似乎需要更广泛的重写,我正在努力避免。
我在这里遗漏了什么,或者我采用的方法太复杂而无法开始?如果有一个更简单的选项来交替重新加载页面,那么它也可以工作。
花了我一天的时间,但我想做的现在正在工作。
在.aspx文件中,我们在header中有<meta http-equiv="refresh" content="15" />
来刷新页面。
在body,我运行一个定时器。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="9000" />
此计时器会更新页面上的必要内容。
<asp:UpdatePanel ID="chartPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
<ContentTemplate>
(chart here)
</ContentTemplate>
</asp:UpdatePanel>
此图表通过 .aspx.cs:
中计时器的 tick 方法更新protected void Timer1_Tick(object sender, EventArgs e)
{
PopulateGraph(1000);
}
1000 是从所有通道中提取信息的特殊情况,而不仅仅是用户给出的单个通道 - 操作员在现场使用此视图的方式是使用查询字符串定义通道,"?ID=1"
,例如。
此解决方案将原始通道信息在屏幕上保留 9 秒,然后计时器计时并使用新信息填充图形,6 秒后页面刷新为原始内容。