GridView и UpdatePanel
От: Macr0s Россия  
Дата: 28.01.10 11:36
Оценка:
Хочу обновить несколько строк в гриде. Причем чтобы они отображались по мере обновления.

В каждой есть TemplateColumn с UpdatePanel в которых есть лейблы.
<asp:TemplateField HeaderText="Запрос"><ItemTemplate>
  <asp:UpdatePanel id="UpdatePanel2" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
      <asp:Label id="labZId" runat="server" Text="-=(Обновление)=-">
    </ContentTemplate>
  </asp:UpdatePanel> 
</ItemTemplate>

Есть такой код:
(gwRes.Rows[3].FindControl("labZId") as Label).Text = "ололо";
(gwRes.Rows[3].FindControl("UpdatePanel2") as UpdatePanel).Update();

for (int i = 0; i < 10000000; i++)
   (gwRes.Rows[3].FindControl("labZId") as Label).Text = "ололо";

(gwRes.Rows[4].FindControl("labZId") as Label).Text = "ололо";
(gwRes.Rows[4].FindControl("UpdatePanel2") as UpdatePanel).Update();

При выполнении этого кода происходит следующее: веб-сервер подвисает на короткое время (специально занял его глупым циклом), затем обновляются сразу обе ячейки.
Почему так происходит? Как сделать чтобы происходило "правильно"?
Использую VS 2005, MS Ajax Extensions, .NET Framework 2.0
Перед тем, как улучшиться, ситуация ухудшается. (из законов Мерфи)
gridview updatepanel
Re: GridView и UpdatePanel
От: Macr0s Россия  
Дата: 03.02.10 07:59
Оценка:
Неужели никто не решал проблему частичного обновления грида?
Перед тем, как улучшиться, ситуация ухудшается. (из законов Мерфи)
Re: GridView и UpdatePanel
От: Овощ http://www.google.com
Дата: 03.02.10 10:04
Оценка:
Здравствуйте, Macr0s, Вы писали:

M>Почему так происходит?


Ты себе неправильно представляещь механизм работы UpdatePanel.
У тебя приходит запрос на сервер. Вызовом Update() ты указываешь что UpdatePanel должна обновиться (т.е. послать на клиента свое новое содержимое).
UpdatePanel просто "запоминает" эту просьбу, поскольку рендеринг и отправка содержимого произойдет только в конце запроса. Здесь UpdatePanel ничего не меняет — общая модель запрос/ответ остается прежней. А сам твой запрос все еще длится в "глупом цикле". Когда цикл и соответственно запрос закочатся, то обе твои UpdatePanel'и получат возможность отправить содержимое клиенту. Тогда, по приходу ответа с сервера, клиент находит в этом ответе указание на обновление двух панелей и соответственно выполняет его. Поэтому у тебя панели и обновляются вместе, потому что время когда был вызван Update() не имеет значения — значимо лишь то, когда пришел ответ с сервера и когда на его основе было выполнено обновление разметки внутри панелей на клиенте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.