2013-01-06 93 views
1

當前我有一個UpdatePanel for jQuery對話框使用,其中包含一個GridView。如何分配UpdatePanel觸發器的控件ID與gridview中的按鈕

這GridView控件包含在頁腳和EmptyDataTemplate

一個FileUpload控件爲了獲得在javascript FileUpload控件的工作,我知道,我們需要觸發。

但是,我想指定爲觸發GridView的模板內的按鈕...

當按鈕btnAdd點擊,文件中FileUpload控件將被保存。


下面是代碼:

<asp:UpdatePanel ID="upnlEditExpense" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnAdd"/> 
     </Triggers> 
      ...................... 
       ........................ 
         ......................... 
     <asp:GridView runat="server" ID="grdExpense" ShowHeader="True" ShowFooter="True" 
      AutoGenerateColumns="False"> 
      <Columns> 
       ................... 
       <asp:TemplateField> 
         <FooterTemplate> 
           <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton> 
         </FooterTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
</asp:UpdatePanel> 

如果我直接把按鈕的ID在這樣觸發的控件的ID,錯誤想出說btnAdd找不到......

什麼我應該怎麼做FileUpload控制工作?

回答

2

嘗試註冊從代碼後回控制的背後是這樣的:

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd"); 
     if (btnAdd != null) 
     { 
      ScriptManager1.RegisterAsyncPostBackControl(btnAdd); 
     } 
    } 
+0

我試過,但它仍然無法正常工作。我需要在此旁邊添加任何其他代碼嗎? –

+0

您是否將此事件鏈接到GridView的'OnRowCreated'?單步執行代碼並確保它進入'if'塊。如果它仍然不起作用,請嘗試@ erich007的方法 –

+0

是的,我做過,但仍然沒有沒有工作。是否必須將UpdateMode更改爲條件? –

2

而不是增加一個觸發upnlEditExpense的也許你可以嘗試添加一個更新面板周圍的鏈接按鈕在模板中沒有觸發。 ..

<asp:TemplateField> 
    <FooterTemplate> 
      <asp:UpdatePanel ID="upnlBtnAdd" runat="server"> 
       <ContentTemplate> 
        <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
    </FooterTemplate> 
</asp:TemplateField> 
+0

首先感謝,我會嘗試 –

+0

,不幸的是,即使我在您的解決方案中添加ContentTemplate base,它也不起作用。 –

+0

好的,最後一條建議:)在你的第一個版本上設置btnAdd ClientIDMode = static – erichste

3

這工作

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd"); 
     if (btnAdd != null) 
     { 
      ScriptManager.GetCurrent(this).RegisterPostBackControl(btnAdd); 
     } 

    } 
0

我也有類似p roblem和這篇文章幫助了我,但我發現只有在updatepanel UpdateMode設置爲「Always」的情況下,才能在scriptmanager中註冊控件。如果其設置爲「有條件」,則此方法不起作用。

我發現了另一個辦法,總是工作這是觸發器添加到在GridView的數據綁定()事件在UpdatePanel:

Dim CheckBoxTrigger As UpdatePanelControlTrigger = New AsyncPostBackTrigger() 
    Dim SelectCheckBox As CheckBox 
    For i = 0 To GridViewEquipment.Rows.Count - 1 Step 1 
     SelectCheckBox = GridViewEquipment.Rows(i).Cells(12).FindControl("CheckBoxSign") 
     CheckBoxTrigger.ControlID = SelectCheckBox.UniqueID 
     UpdatePanelEquipment.Triggers.Add(CheckBoxTrigger) 
    Next 
相關問題