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