Обновление GridView из WebMethod - PullRequest
       4

Обновление GridView из WebMethod

1 голос
/ 29 августа 2011

Мне нужна помощь с чем-то, это может быть немного сложно.Я вызываю WebMethod, который делает что-то из файла js.Он также вызывает некоторые функции, которые находятся в классе внутри кода приложения.

В этом классе в app_code я получаю элемент управления GridView, который находится на моей странице, и мне нужно обновить его, поэтому я делаю это:

ActiveGridView.DataSource = (ActiveDataTable).DefaultView;
ActiveGridView.DataBind();    

Приведенное выше работает нормально, когда я вызываюработает в app_code из обычной функции, но не обновляет сетку, когда я вызываю ее в WebMethod.

Есть идеи, как решить эту проблему?

Обратите внимание, что я не могу заставить WebMethod вернуть данные, а затем на стороне клиента обновить сетку.

Отредактировано

На самом деле яЯ использую updatePanel, мой код aspx выглядит следующим образом:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:GridView ID="MappedDataGrid" runat="server" CssClass="pipesTbl">
                    </asp:GridView>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>

И снова это прекрасно работает, когда я вызываю заполнить сетку из события на странице, но затем, когда я вызываю его после вызова webMethodsкласс в app_code, который является супругом для заполнения сетки, он не пополняется. Отредактировано снова

Я думаю, что проблема с этой строкой:

<Triggers>
  <asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" />
</Triggers>

Я попытался изменить это на:

<Triggers>
   <asp:AsyncPostBackTrigger ControlID="MappedDataGrid" EventName="DataBinding" />
</Triggers>

Но не сделалне работает, я, вероятно, что-то упустил, и, поскольку это все для меня ново, я не знал, что делать.

Что мне теперь делать, чтобы все заработало, как вы сказали?

Ответы [ 2 ]

1 голос
/ 29 августа 2011

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

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

1 голос
/ 29 августа 2011

Когда вы вызываете WebMethod, вы на самом деле не загружаете страницу и не проходите ее жизненный цикл. Даже несмотря на то, что ваш метод является частью класса codebehind вашей страницы, когда вы вызываете его таким образом, ваши элементы управления на странице не будут доступны. Это просто ярлык для создания веб-службы из метода в классе вашей страницы.

Исходя из того, что вы говорите, вы хотите сделать, вы можете захотеть использовать UpdatePanel . С ними он выполняет полную обратную передачу на страницу, и вы можете изменить все, что необходимо, с помощью элементов управления страницей.

Обновление

Смысл в UpdatePanel заключается в том, что вы больше не будете использовать свой WebMethod . Вы просто нажмете обычную кнопку, которая является триггером для панели обновления, и вы обновите свою сетку, как обычно, в коде позади (обработайте событие нажатия кнопки и вызовите свой код, чтобы связать сетку). Поскольку на панели находится только сетка, только она будет обновляться на экране.

...