asp.net Tab Control导致回调时索引超出范围错误

时间:2011-01-23 21:55:57

标签: c# asp.net asp.net-ajax

我有一个简单的应用程序,GridView绑定到LinqDataSource和DetailView,当它被选中时显示GridView中的一行。这按预期工作。但现在我将GridView和DetailView放在asp.net ajax Tab Control中的单独TabPanel中。

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<asp:TabContainer ID="CourseFinder" runat="server" ActiveTabIndex="0">
    <asp:TabPanel ID="ResultsTab" runat="server" HeaderText="Results" > 
    </asp:TabPanel>
    <asp:TabPanel ID="DetailTab" runat="server" HeaderText="Detail">
    </asp:TabPanel>
</asp:TabContainer>

我的代码隐藏在文件

之后
protected void Page_Load(object sender, EventArgs e)
{
    CourseFinder.Tabs[0].Controls.Add(Results);
    CourseFinder.Tabs[1].Controls.Add(DetailsView1);
}

当我运行页面时,我正在

[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than 
the size of the collection.
Parameter name: index]
System.Collections.ArrayList.get_Item(Int32 index) +7483656
System.Web.UI.WebControls.GridViewRowCollection.get_Item(Int32 index) +13
_Default.Results_SelectedIndexChanged(Object sender, EventArgs e) in c:\Documents and   
Settings\Administrator\My Documents\Visual Studio 
2008\WebSites\WebSite1\Default.aspx.cs:35
...

获取错误的代码行是尝试从GridView获取SelectedIndex并更新我的DetailView的代码。

 GridViewRow row = Results.Rows[Results.SelectedIndex];

我使用调试器逐步完成代码,SelectedIndex不是负数,并且它不大于GridView中的行数。所以我很困惑,为什么简单地将控件放在Tab中会导致这个错误?

2 个答案:

答案 0 :(得分:1)

  

您是否动态添加面板? [卡雷尔]

     

...是

     

是否有另一种获取标签的方法   显示而不添加它们   动态?我无法接受他们   否则显示[Matt Phillips]

不要那样做!它使事情变得更加复杂。 您可以将GridView / DetailsView添加到UserControl并将其添加到TabPanel的ContentTemplate。

这是一个关于如何延迟加载TabPanels的好教程: http://mattberseth.com/blog/2007/07/how_to_lazyload_tabpanels_with.html

答案 1 :(得分:0)

从工具包中(只需在aspx页面中添加tabpannels;错误就会解决):

<ajaxToolkit:TabContainer runat="server" 
    OnClientActiveTabChanged="ClientFunction" 
    Height="150px">
<ajaxToolkit:TabPanel runat="server" 
    HeaderText="Signature and Bio"
    <ContentTemplate>
        ...
    </ContentTemplate>
/>