我有一个简单的应用程序,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中会导致这个错误?
答案 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>
/>