我在GridView中獲取命令鏈接時遇到了一些問題,以保持它在初始回發之後更改選項卡的能力。所以,下面你會看到我的內容的結構(很大程度上簡化):從tabab容器中的databound gridview丟失更新面板觸發器
<ajaxToolkit:TabContainer runat="server" ID="tabBody">
<ajaxToolkit:TabPanel runat="server" ID="tabPanel1">
<ContentTemplate>
<asp:UpdatePanel runat="server" ID="updPanel1">
<ContentTemplate>
<asp:Gridview runat="server" ID="grd1" OnRowCommand="grd1_RowCommand" OnRowDataBound="grd1_RowDataBound">
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkChangePanels" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="gotopanel2" Text='<%#Eval("FirstName") & " " & Eval("LastName")%>' />
</ItemTemplate>
</asp:TemplateField>
</asp:Gridview>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
<ajaxToolkit:TabPanel runat="server" ID="tabPanel2">
<ContentTemplate>
<asp:UpdatePanel runat="server" ID="updPanel2">
<ContentTemplate>
<asp:Gridview runat="server" ID="grd2">
</asp:Gridview>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
</ajaxToolkit:TabContainer>
爲了填補面板1在GridView上,有一個搜索框,用戶類型爲我調用一個函數來綁定LINQ查詢到它。
現在我添加rowcommand作爲回傳觸發的RowDataBound:
Protected Sub grd1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lb As LinkButton = CType(e.Row.FindControl("lnkChangePanels"), LinkButton)
If Not lb Is Nothing Then
ToolkitScriptManager1.RegisterPostBackControl(lb)
End If
End If
End Sub
那麼這裏就是我要觸發標籤面板更改(並做一些其他的東西)的代碼:
Protected Sub grd1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grd1.RowCommand
Dim id = e.CommandArgument.ToString()
Select Case e.CommandName
Case "gotopanel2"
eventDetails(id, "C")
tabBody.ActiveTab = tabPanel2
End Select
End Sub
這會導致正確的回發並更改選項卡,一切按預期工作。但是如果我回到第一個選項卡並嘗試在gridview 1中單擊另一行,則什麼都不會發生。
有沒有一種方法來構造這樣的一個選項卡可以改變而不會丟失回發觸發器,或者我對這一切都有錯?
謝謝。
輝煌。現在看來合乎邏輯的是將整個事情包裝在一個大的更新面板中,而不是單個的。該解決方案奏效。謝謝。 – jethomas