从WebMethod更新GridView

时间:2011-08-29 11:44:38

标签: c# asp.net gridview webmethod

我需要帮助,可能有点复杂。我调用了一个从js文件中做一些事情的WebMethod。它所做的一件事是,它调用位于app_code中的类中的一些函数。

在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 个答案:

答案 0 :(得分:1)

当您调用WebMethod时,实际上并未加载页面并在页面生命周期中运行。即使您的方法是您的页面代码隐藏类的一部分,当您以这种方式调用它时,页面上的控件将无法使用。它只是从页面类中的方法中创建Web服务的快捷方式。

根据您的意愿,您可能希望使用UpdatePanel。有了它们,它实际上是对页面进行完整的回发,您可以更改页面控件所需的任何内容。

<强>更新

UpdatePanel的要点是将不再使用您的WebMethod 。您只需单击作为更新面板触发器的普通按钮,您将在后面的代码中正常更新网格(处理按钮的单击事件并调用代码绑定网格)。由于只有网格在面板中,因此只会在屏幕上刷新。

答案 1 :(得分:1)

如果您调用的方法在该页面的生命周期之外操作ASP.NET页面,则不会查看结果。如果要将数据绑定到ASP.NET控件,它需要位于页面的生命周期中,如果您通过webmethod从javascript调用该方法,那么该方法将在生命周期之外执行。

尝试使用AJAX将数据嵌入到UpdatePanel中来填充数据网格。