我有一个下拉列表,我从SQL服务器填充数据。
我在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);
}
}
我的代码中的问题在哪里,它不起作用而是示例。 提前感谢
答案 0 :(得分:7)
在页面加载时,您必须在此条件下填充下拉列表。 因为在每个帖子后面都会再次填充你的ddl并丢失其选定的索引。
if (!IsPostBack)
{
//PopulateYourDDL here
}
答案 1 :(得分:0)
你填写了Page_Init()
的下拉列表,在每次回发中都会调用它并重新填充你的下拉列表,因此会丢失selectedindex。所以你必须填写!ispostback
块内的下拉列表
if (!IsPostBack)
{
//fill your dropdown here
}
答案 2 :(得分: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()函数。在Page_Init()或Page_PreInit()下绑定DropdownList。如果你想在DropDownlist Selection Check out this上执行一些功能!确定触发的WebControl ID,然后在Page_PreInit()或Page_Init()中执行一个唯一的函数。