![](/img/trans.png)
[英]doesn't fire selected index changed event for a drop down list created on run time
[英]Drop down's selected Index doesn't match the position of the displayed selected element
我有一個下拉列表和一個添加按鈕。 單擊添加按鈕后,將從下拉菜單中選擇的項目添加到數據庫中。 但是在添加按鈕調用的函數中使用的selectedIndex值是錯誤的。 (大部分時間)它與當前所選項目的實際索引不匹配。
這是下拉列表和按鈕:
<asp:DropDownList runat="server" id="ddlNewCreature" AutoPostBack = "false" DataMember="0"></asp:DropDownList>
<asp:Button ID="btnAddCreature" runat="server" Text="Add" onClick="AddCreature"/>
這是背后的代碼:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ddParent1.Items.Count == 0)
{
if (ddBaby.Items.Count == 0)
{
loadCreatureLists(true, true);
}
else
{
loadCreatureLists(true, false);
}
}
else
{
if (ddBaby.Items.Count == 0)
{
loadCreatureLists(false, true);
}
}
}
}
protected void loadCreatureLists(Boolean loadParents, Boolean loadOffspring )
{
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Drin"].ConnectionString);
string sSql = "select creature, element1, element2 from dbo.tinycastlecreatures order by creature";
SqlCommand cmd = new SqlCommand(sSql, conn);
SqlDataReader reader;
try
{
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
ListItem newItem = new ListItem();
newItem.Text = reader["creature"].ToString();
newItem.Value = normalizeElementOrder(reader["element1"].ToString(),reader["element2"].ToString());
if (loadParents && !chkMine.Checked)
{
ddParent1.Items.Add(newItem);
ddParent2.Items.Add(newItem);
}
if (loadOffspring)
{
ddBaby.Items.Add(newItem);
ddlNewCreature.Items.Add(newItem);
}
}
reader.Close();
}
catch (Exception err) { }
finally { if (!loadParents || !chkMine.Checked) { conn.Close(); } }
}
protected void AddCreature(object sender, EventArgs e)
{
int indx = ddlNewCreature.SelectedIndex;
string sCreature = ddlNewCreature.Items[indx].Text.ToString();
for (int i = 0; i < ddlNewCreature.Items.Count; i++ )
{
sCreature = ddlNewCreature.Items[i].Text.ToString();
}
ddlNewCreature.SelectedIndex = 0;
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Drin"].ConnectionString);
conn.Open();
string sSql = "[dbo].[tinycastle_add_user_creature] '";
sSql += sCreature;
sSql += "','deb'";
SqlCommand cmd = new SqlCommand(sSql, conn);
cmd.ExecuteNonQuery();
sCreature = ddlNewCreature.Items[indx].Text.ToString();
sqlMineSource.DataBind();
gridMine.DataBind();
}
我認為B.Yaylaci建議在下拉列表的changed事件中檢查SelectedIndex
的建議是正確的,以找出為什么(何時?:)索引與您的期望不匹配。 另外,如果您需要的只是下拉列表中的文本,則使用SelectedValue
屬性會容易得多(更准確)。 https://stackoverflow.com/a/4399747
我通過消除各種下拉列表的填充方式並將它們綁定到SQLDataStore來避免了這個問題。 我不知道為什么這樣做有幫助,但確實有幫助。
使用ddlNewCreature.SelectedValue可以解決您的問題。“ SelectedValue”為選定的DropDownList提供正確的索引值。 這對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.