Метод обновления данных на странице, чередующийся по источникам - PullRequest
0 голосов
/ 17 января 2020

В настоящее время у меня есть одна веб-страница, asp. net и c#, которая получает данные с сервера SQL и отображает их в виде простой диаграммы. Количество возвращаемых строк варьируется.

Цель состоит в том, чтобы на веб-странице отображался небольшой набор данных в течение x секунд, а затем обновите sh страницу, чтобы отобразить обзор всех наборов данных. Данные извлекаются с помощью хранимой процедуры, и изменения должны происходить только на отображающей их веб-странице.

Что у меня есть

Чтобы заполнить диаграмму при загрузке страницы, Я использую следующее:

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"/> исходного сайта данные на графике, похоже, не обновляются.

В одном из вариантов, которое я пробовал, используется таймер, который я временно добавил для отображения на ярлык, и он, похоже, тоже не обновляется - или обновляется, но способ, которым я пытаюсь перерисовать диаграмму, просто не обновляет sh.

То, что я пробовал

Я думал, что запуск таймера с событием триггера будет самым простым способом для достижения этой цели, поэтому я попробовал следующее:

<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 - это страница «обзора», которую я хочу показать, и счетчик, чтобы данные одного канала отображались в течение 15 секунд, а затем мы включаем обзор на пять секунд и возвращаемся обратно.

Я также пытался использовать серверный сценарий для тикового метода, но это, казалось, требовало еще более обширного переписывания, которого я стараюсь избегать .

Что мне здесь не хватает, или я выбрал подход, который слишком сложен для начала? Если есть более простой вариант для чередующихся перезагрузок страницы, это также может помочь.

1 Ответ

0 голосов
/ 22 января 2020

У меня ушел день, но то, что я хотел сделать, теперь работает.

В файле .aspx у нас есть <meta http-equiv="refresh" content="15" /> в заголовке для обновления sh страницы.

В теле я запускаю таймер.

<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:

protected void Timer1_Tick(object sender, EventArgs e)
{
  PopulateGraph(1000);
}

1000 - это особый случай, когда нужно извлекать информацию из всех проходов, а не только из одного, заданного пользователем. Операторы используют это представление в поле для определения проход со строкой запроса, например, "?ID=1".

Это решение сохраняет первоначальную информацию о проходе на экране в течение 9 секунд, затем таймер тикает и заполняет график новой информацией, а после 6 секунд страница обновляется до исходного содержимого.

...