簡體   English   中英

下拉菜單的選定索引與顯示的選定元素的位置不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM