在页面上刷新数据的方法,通过源交替

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:UpdatePanelContentTemplate 标签中。我认为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 秒后页面刷新为原始内容。