2013-07-19 3 views
0

SQL 서버의 데이터로 채울 드롭 다운이 있습니다.DropDownList가 PostBack 후에 인덱스를 잃습니다.

나는 Page_Init() 이벤트에서 드롭 다운을 동적으로 채 웁니다. 값에 따라 ListItem이 선택됩니다.

이제 문제는 드롭 다운에서 다른 항목을 선택하면 해당 항목이 포스트 백 후에 드롭 다운 목록의 첫 번째 항목으로 재설정된다는 것입니다. 그것이 작동하지만, 예를하지 않는다는 것을, 내 코드에 문제가

 ArrayList AD_Group_Members = ActiveDirectory.GetMemberOfGroup("AD-Group"); 
     ArrayList ListMachines = SQLQuery.Read("Database", "SELECT idVM, RandomString, Computername, Owner, FROM VM ORDER BY Computername"); 

     for (int i = 0; i < ListMachines.Count; i++) 
     { 
      String RandomString = ((Hashtable)ListMachines[i])["RandomString"].ToString(); 
      String Owner = ((Hashtable)ListMachines[i])["Owner"].ToString(); 
      DropDownList DropDownList_Owner = new DropDownList(); 
      DropDownList_Owner.ID = "DropDownList_Owner_" + RandomString; 
      DropDownList_Owner.Width = Unit.Percentage(95); 
      DropDownList_Owner.AutoPostBack = true; 
      DropDownList_Owner.EnableViewState = true; 
      DropDownList_Owner.SelectedIndexChanged += DropDownList_Owner_SelectedIndexChanged; 
      Div_Test.Controls.Add(DropDownList_Owner); 
      for (int y = 0; y < AD_Group_Members.Count; y++) 
      { 
       ListItem ListItem = new ListItem(); 
       ListItem.Value = Owner; 
       ListItem.Text = ((Hashtable)AD_Group_Members[y])["GivenName"].ToString() + " " + ((Hashtable)AD_Group_Members[y])["Surname"].ToString(); 
       if (((Hashtable)AD_Group_Members[y])["Username"].ToString().Equals(Owner)) 
       { 
        ListItem.Selected = true; 
       } 
       DropDownList_Owner.Items.Add(ListItem); 
      } 
     } 

을 :

여기이 작동하지 않습니다 내 코드의 기본 버전입니다. 미리 감사드립니다.

답변

7

pageload에서이 조건으로 드롭 다운 목록을 채워야합니다. 모든 게시물 백에서 ddl이 다시 채워지고 선택한 인덱스가 없어지기 때문입니다.

if (!IsPostBack) 
{ 
    //PopulateYourDDL here 
} 
+0

확인 : 내가 SelectedValue – Solaflex

+0

로 선택한 항목 "사용자 A"는의 SelectedIndexChanged 이벤트에서 "사용자 B"에하는 것은 여전히 ​​"사용자 A"입니다 변경 후 인용하여 채우기 함수에서 제거하고 질문에서 불필요한 코드를 제거하십시오. – Veer

+0

이제는 실제 코드에서 시도해 보았습니다. 이제는 선택한 항목의 변경 후 모든 항목이 떨어져 있고 SelectedIndexChanged 이벤트가 트리거되지 않습니다. 문제가 해결되었으므로 개선이 필요합니다. – Solaflex

0

당신은 모든 포스트 백 호출하고 드롭 다운 리필 따라서 selectedindex.So 당신이 !ispostback 블록 내부에 드롭 다운을 채울 필요가 손실 도착하는 Page_Init()에 드롭 다운을 작성

if (!IsPostBack) 
{ 
    //fill your dropdown here 
} 
0

나는 당신이해야한다고 생각 드롭 다운에 대한 고유 한 값입니다. 또한 데이터 값 필드에 값이 중복되면 문제가 발생합니다. 첫 번째 경기를 찾고 그것을 선택합니다. 고유하게 식별 할 수있는 값을 조작 할 수 있습니다. 다음과 같은 뭔가 :

COLUMN_NAME DATA_TYPE 
a   a_decimal 
b   b_decimal 
c   c_decimal 
d   d_int 
e   e_int 
f   f_varchar 
g   g_varchar 
h   h_varchar 
i   i_varchar 
j   j_varchar 

Check out this Useful Source! 도움이되기를 바랍니다 !!! 수락 된 답변 섹션에있는 해당 댓글을 자세히 살펴보십시오!

또한 동적으로 생성 된 웹 컨트롤을 처리하는 동안 SelectedIndex_Changed() 함수를 사용하지 마십시오. Page_Init() 또는 Page_PreInit()에서 DropdownList를 바인딩하십시오. DropDownlist 선택시 일부 기능을 수행하려면 Check out this! 트리거되는 WebControl ID를 결정한 다음 Page_PreInit() 또는 Page_Init()에서 고유 한 기능을 수행합니다. 지금은 문제 다음 한 저를 도와하지만