Используйте UpdatePanel с GridView - PullRequest
0 голосов
/ 27 августа 2010

У меня есть главная страница с боковой панелью, которая содержит гармошку для навигации по сайту. На одной из моих дочерних форм я добавил GridView внутри UpdatePanel. Этот пользователь начинает работу нажатием кнопки. Эта работа записывает данные в таблицу базы данных, и я хотел бы видеть эти обновления, представленные в виде таблицы. Я добавил элемент управления таймером с событием ontick, которое выполняет GridView.DataBind.

Данные GridView обновляются на каждом тике (2 секунды), проблема в том, что вся страница (включая главную страницу) получала обратную передачу - что приводит к сбросу выбранной панели моего аккордеонного элемента управления.

Раньше я не использовал элемент управления UpdatePanel, но я надеялся, что это предотвратит обратную передачу всей страницы. Наверное, я что-то неправильно настроил. Я вставил div, содержащий Panel и GridView ниже. Может кто-нибудь сказать мне, что я сделал не так?

Спасибо

Rob.

<div id="statusGrid">
    <u>Job Status</u>
    <br />
    <asp:UpdatePanel ID="StatusUpdatePanel" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:GridView ID="grdJobStatus" runat="server" DataSourceId="sqlJobStatus">
                <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
                <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
            </asp:GridView>
            <asp:SqlDataSource ID="sqlJobStatus" runat="server" ConnectionString="<%$ ConnectionStrings:ARC_CTRLConnectionString %>">
            </asp:SqlDataSource>
        </ContentTemplate>
    </asp:UpdatePanel>


    <asp:Label ID="lblBODIJobMsg" runat="server"></asp:Label>
</div>

Ответы [ 4 ]

1 голос
/ 27 августа 2010

Только элементы внутри UpdatePanel будут обновлены при частичной обратной передаче - вы ожидали, что lblBODIJobMsg будет обновлено?

Посмотрите также, что @ck сказал о других изменениях, связанных с вашим кодом.

Вы также можете проверить другие элементы javascript и ASP.Net на странице. У меня были случаи, когда вся страница отправлялась обратно из-за DropDownList, который был в `UpdatePanel.

Где твой таймер? в зависимости от того, как вы это реализовали, он может опубликовать всю страницу. Возможно, он тоже должен быть внутри UpdatePanel

0 голосов
/ 18 июля 2012

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

<Triggers>
      <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />

</Triggers>
0 голосов
/ 27 августа 2010

В вашей page_load вы должны проверить IsPostBack.Примерно так

protected void Page_Load(object sender, EventArgs e)
{
   if(IsPostBack) return;
   //do first-time load stuff here
}

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

0 голосов
/ 27 августа 2010

Событие Page_Load вызывается как часть обратной передачи AJAX. Если это имеет какие-либо побочные изменения, то вся страница будет перезагружена.

...