2014-11-08 9 views
0

LBParent, LBChild1LBChild2의 세 가지 목록 상자가있는 ASP.NET 컨트롤이 있습니다.선택한 인덱스 변경시 서로 참조하는 ASP.NET 채우기 목록

LBParent은 프로그래밍 방식으로 채워야합니다. Page_Load에서이 작업을 수행합니다.

사용자가 LBParent에서 값을 선택하면 프로그래밍 방식으로 데이터가있는 LBChild1LBChild2을 모두 채우고 싶습니다. 어린이 목록 또한 선택한 값을 추적해야합니다.

기본적으로 상위 목록은 사용자 목록이며, 첫 번째 목록은 사용자의 사용 권한 목록이고, 두 번째 목록은 사용자에게없는 사용 권한 목록입니다.

내 계획은 두 목록 사이에 사용 권한을 이동하는 두 개의 단추를 추가하는 것입니다.

불행히도, 나는 제대로 작동하지 않습니다.

  • 부모 목록을 Page_Load으로 채우는 경우 선택한 색인이 재설정 된 것처럼 보입니다. 인덱스를 저장하려면 ViewState을 사용했습니다 ... 그러나 포스트 백 이후에는 업데이트되지 않으므로 추가 새로 고침이 필요합니다. 이것은 허용되지 않습니다.

  • OnParentSIC 이벤트에서 어린이 목록 상자를 채우는 경우 선택한 색인을 추적 할 수있는 방법이 없습니다. 목록 상자가 "너무 빨리"다시 채워지기 때문에 OnChildXSIC 이벤트가 실행되지 않습니다. (?)

의도 한대로 작동 시키려면 어떻게해야합니까? 어쩌면 더 나은 해결책이있을 수 있지만 현재 가능한 솔루션을 볼 수 없기 때문에이 솔루션이 어떻게 작동하는지 이해하고 싶습니다. 이

처럼


Control.ascx

<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="True" CodeBehind="..." Inherits="..." %> 
<form runat="server"> 
    <asp:ListBox ID="LBParent" runat="server" CssClass="form-control" 
        AutoPostBack="true" OnSelectedIndexChanged="OnParentSIC" />        
    <asp:ListBox ID="LBChild1" runat="server" CssClass="form-control" 
        AutoPostBack="true" OnSelectedIndexChanged="OnChild1SIC" />        
    <asp:ListBox ID="LBChild2" runat="server" CssClass="form-control" 
        AutoPostBack="true" OnSelectedIndexChanged="OnChild2SIC" /> 
</form> 

Control.ascx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Populate parent 
    for(...) LBParent.Items.Add(...); 
} 
+0

'ViewState를 사용하여 색인을 저장했습니다 ...하지만 추가로 새로 고침이 필요합니다. –

+0

@Ganesh_Devlekar에 대한 코드를 게시 할 수 있습니다 : 기본적으로'OnParentSIC'과 같은 SelectedIndexChanged 이벤트에서 간단히'ViewState [ "parentIdx"] = LBParent.SelectedIndex;를 호출했습니다. 이 이벤트가 실행되는 동안 목록이 채워진 후에 발생하므로 추가 페이지 새로 고침이 필요합니다. 'Page_LoadComplete'에리스트 채우기 코드를 넣으면 이벤트가 전혀 발생하지 않습니다. –

+0

시도한 코드를 모두 붙여 넣으십시오. –

답변

1

onchange를-이벤트가 발생하여 ListItem을 추가 미국에게

처음을 유지하지만, 그 전에 온로드 화재합니다. 그래서 :

  1. 다시 게시가 서버에서
  2. 트리거되는 선택에 대한 사용자의 클릭 지금 선택을 잃은 온로드 화재 (및 목록을 다시 작성)
  3. OnSelectedIndexChanged 화재 ()

그래서 (Onload에서) 목록을 다시 작성하기 전에 현재 선택한 인덱스를 저장하려고합니다.

동일한 '포스트 백'상태에서 나중에 복원하는 경우 간단한 변수에 저장할 수 있습니다. Viewstate 또는 Session에 저장할 필요가 없습니다.

1

사용을 같은 페이지에있는 경우, 당신은 사용할 수 있습니다 ViewState/Hidden Fields 는 PageLoad 사용처럼에

protected void Page_Load(object sender, EventArgs e) 
{ 

if(!Page.IsPostBack) 
{ 
    AddListItems(); 
} 
} 

Protected Void AddListItems() 
{ 
// Populate parent 
    for(...) LBParent.Items.Add(...); 
    for(...) SecondList.Items.Add(...); 
    for(...) ThirdList.Items.Add(...); 
} 
+0

이렇게하면 모든 목록이 PostBack에서 지워집니다. 항목이 유지되지 않습니다. –

+0

@VittorioRomeo 전체 코드를 게시하면 문제를 더 잘 찾아 낼 수 있습니다. –