2011-01-23 10 views
1

LinqDataSource에 바인딩 된 GridView가있는 간단한 응용 프로그램과 선택한 경우 GridView의 행을 표시하는 DetailView가 있습니다. 이것은 예상대로 작동합니다. 하지만 지금 GridView 및 DetailView asp.net 아약스 Tab 컨트롤에서 별도의 TabPanels 배치 해요.asp.net 탭 컨트롤이 콜백시 경계를 벗어난 오류를 발생시킵니다.

<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 
... 

오류를 받고 코드 줄을 얻고 페이지를 실행하면 selectedIndex의를 얻기 위해 시도 하나 GridView에서 내 DetailView를 업데이트하십시오.

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

디버거로 코드를 밟았으므로 SelectedIndex는 음수가 아니며 GridView의 행 수보다 큽니다. 그래서 왜 단순히 컨트롤을 탭 안에 두는 것이이 오류의 원인인지 혼란 스럽습니다. 툴킷에서

+1

는 동적 패널을 추가 :

방법은 다음과 같습니다 게으른로드상에서 tabpanels에에 좋은 튜토리얼은? – Karel

+0

네, 그렇습니다. 그렇지 않으면 그것을 할 수있는 방법을 찾을 수 없었기 때문입니다. 탭을 사용하는 방법에 대한 좋은 예가 많지 않으므로 내 페이지 (Default.aspx)에 정의한 다음 Page_load의 코드에서 각 탭에 개별적으로 컨트롤을 추가하고 있습니다. –

+0

동적으로 추가하지 않고 탭을 표시하는 또 다른 방법이 있습니까? 그렇지 않으면 표시 할 수 없습니다. –

답변

1

는 동적으로 패널을 추가하고 있습니까? [카렐]

예 ...

들을 동적으로 추가하지 않고 표시 할 탭을 얻을 수있는 또 다른 방법이 있나요

? 나는 그 (것)들을 얻을 수 없었다 그렇지 않으면 디스플레이 [매트 필립스]

Do not do that! 그것은 일을 훨씬 더 복잡하게 만듭니다. GridView/DetailsView를 UserControl에 추가하고 이것을 TabPanel의 ContentTemplate에 추가 할 수 있습니다. http://mattberseth.com/blog/2007/07/how_to_lazyload_tabpanels_with.html

0

(당신의 aspx 페이지에서 tabpannels를 추가, 오류가 해결 될 것입니다) :

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

+0

이미 aspx 페이지에 탭 패널이 있습니다. 내 게시물을 업데이트하여 패널을 추가하는 방법을 보여줄 것입니다. –

관련 문제