2011-08-29 138 views
1

我需要某些幫助,可能有點複雜。我稱之爲從一個js文件中做一些事情的WebMethod。它所做的一件事就是它調用位於app_code中的類中的一些函數。從WebMethod更新GridView

在的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> 

但沒有工作,我可能失去了一些東西,因爲這對我來說都是新的,我不知道該怎麼做。

我現在應該做些什麼才能使它像你說的那樣工作?

回答

1

當您調用WebMethod時,實際上並沒有加載頁面並正在運行整個頁面生命週期。儘管你的方法是你的頁面代碼隱藏類的一部分,但當你用這種方式調用它的時候,你的頁面上的控件將不可用。這只是使您的頁面類中的某個方法無法使用Web服務的快捷方式。

根據你所說的你想要做的事情,你可能想看看使用UpdatePanel。有了它們,它實際上是對頁面進行完整回發,並且可以更改頁面控件所需的任何內容。

更新

與在UpdatePanel的一點是,你不會將您的WebMethod了。您只需單擊一個正常按鈕,該按鈕是更新面板的觸發器,您將在後面的代碼中像正常一樣更新網格(處理按鈕的單擊事件並調用您的代碼來綁定網格)。由於只有網格在面板中,因此只有它會在屏幕上刷新。

+0

謝謝。我編輯了這個問題,你能看到我的代碼後,更具體地說你說過什麼嗎?謝謝 – Ovi

1

如果您調用一個方法來處理ASP.NET頁面超出該頁面的生命週期,那麼您將不會查看結果。如果你想將數據綁定到ASP。NET控件,它需要處於頁面的生命週期中,並且如果您通過web方法從javascript調用方法,則該方法將在生命週期外執行。

嘗試使用AJAX將數據網格嵌入到UpdatePanel中。

+0

謝謝。我編輯了這個問題,你能看到我的代碼後,更具體地說你說過什麼嗎?謝謝 – Ovi