2013-07-19 122 views
0

我有一个下拉式的填充数据从SQL服务器。DropDownList丢失索引后回发

我在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

您必须在页面加载条件下填充您的下拉列表。 因为在每个帖子后面,您的ddl会再次填充并丢失其选定的索引。

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

好吧,那帮了我,但现在我有以下问题: 在我将选定项目“用户A”更改为“用户B”后,SelectedIndexChanged事件仍然是“用户A”SelectedValue – Solaflex

+0

引用您的填充功能并从您的问题中删除不必要的代码。 – Veer

+0

我现在在我的真实代码中尝试了它,现在存在这样的问题,即在选定项目的更改后,所有项目都将消失,并且SelectedIndexChanged事件不会触发。请求澄清或建议改进。 – Solaflex

0

您填写的下拉在Page_Init()都会调用每一个回传和填充你的下拉列表,并因此失去selectedindex.So你必须填写里面!ispostback块的下拉

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! 我希望它有帮助!仔细阅读接受的答案部分中的那些评论!

还要避免在处理动态生成的Web控件时使用SelectedIndex_Changed()函数。将DropdownList绑定到Page_Init()或Page_PreInit()下。如果你想在DropDownlist选择Check out this上执行一些功能!确定触发的WebControl ID,然后在Page_PreInit()或Page_Init()中执行一个唯一的功能。