C# 未从下拉框中获取选定值

C# 未从下拉框中获取选定值,c#,asp.net,C#,Asp.net,我在从下拉框中获取正确的值时遇到问题。基本上我有一个程序,它有一个下拉列表,其中填充了保存在数据库表中的名称。用户从下拉框中选择一个名称,然后单击按钮从数据库中删除该名称。我遇到的问题是,无论选择哪个名称,都会从下拉框中删除第一个名称(索引为0) 这让我相信,当点击按钮时,SelectedIndex会被重置,我不明白这一点 删除按钮的代码: protected void cmdDelete_Click(object sender, EventArgs e) { using (SqlCon

我在从下拉框中获取正确的值时遇到问题。基本上我有一个程序,它有一个下拉列表,其中填充了保存在数据库表中的名称。用户从下拉框中选择一个名称,然后单击按钮从数据库中删除该名称。我遇到的问题是,无论选择哪个名称,都会从下拉框中删除第一个名称(索引为0)

这让我相信,当点击按钮时,SelectedIndex会被重置,我不明白这一点

删除按钮的代码:

protected void cmdDelete_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(@"Server=myname-PC\SQLEXPRESS;Database=dbNames;Trusted_Connection=True;"))
    {
        try
        {
            conn.Open();
            SqlCommand comm = new SqlCommand("DELETE FROM Names WHERE FirstName=@FirstName AND LastName=@LastName", conn);
            char[] delims = new char[1];
            delims[0] = ' ';

            //lblGreeting.Text = cblNames.

            lblGreeting.Text = ddlNames.SelectedItem.Text;
            string[] names = ddlNames.SelectedValue.ToString().Split(delims);
            string fname = names[0];
            string lname = names[1];
            comm.Parameters.Add(new SqlParameter("@FirstName", fname));
            comm.Parameters.Add(new SqlParameter("@LastName", lname));
            comm.ExecuteNonQuery();
            conn.Close();
            LoadTable();
        }
        catch (Exception ex)
        {
            Response.Write("Delete Table: "+ex.ToString());
        }
    }
}
感谢您的帮助

我真的不确定如果页面不是第一次呈现,应该更改什么,或者为什么会更改我希望该函数执行的操作。单击按钮后将调用它,并且应在再次呈现表之前获取该值。我将包括LoadTable(),以防它有帮助:

protected void LoadTable() 
{
    using (SqlConnection conn = new SqlConnection(@"Server=myname-PC\SQLEXPRESS;Database=dbNames;Trusted_Connection=True;"))
    {
        try
        {
            conn.Open();
            using (SqlCommand comm = new SqlCommand("SELECT * FROM Names",conn))
            {
                SqlDataReader rd = comm.ExecuteReader();
                string fname="";
                string lname="";
                ddlNames.Items.Clear();
                while (rd.Read())
                {
                    fname = rd.GetString(0);
                    lname = rd.GetString(1);
                    ddlNames.Items.Add(fname + " " + lname);
                }
                rd.Close();
            }                    
        }
        catch (Exception ex)
        {
            Response.Write("Load Table: "+ex.ToString());
        }
        conn.Close();
    }
}
其他两项职能:

protected void Page_Load(object sender, EventArgs e)
{
    LoadTable();

}

protected void cmdAdd_Click(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(@"Server=myname-PC\SQLEXPRESS;Database=dbNames;Trusted_Connection=True;"))
    {
        try
        {
            conn.Open();
            char[] splits = new char[1];
            splits[0] = ' ';
            string fname = txtName.Text.Split(splits)[0];
            string lname = txtName.Text.Split(splits)[1];
            SqlCommand comm = new SqlCommand("INSERT INTO Names VALUES(@FirstName,@LastName)",conn);
            comm.Parameters.Add("@FirstName", fname);
            comm.Parameters.Add("@LastName", lname);
            comm.ExecuteNonQuery();
            conn.Close();
            LoadTable();

        }
        catch(Exception ex)
        {
            Response.Write("Add Name: "+ex.ToString());
        }
    }
}

尝试改用ddlNames.SelectedItem.Value。

您可能正在页面加载功能中填充下拉列表,并且没有页面返回检查。因此,每次再次填充列表时。将填充代码更改为类似以下内容:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadTable();
        }


    }

这是Page_Load()函数中唯一的代码。请发布Page_Load函数好吗?我已经包含了其余的代码。就我所能想象的而言,添加点击是非常不相关的。您是否在删除事件中设置了断点并对其进行了调试?@m.webster没问题,每次回发时都会调用页面加载函数,就像单击按钮一样。这意味着每次你点击一个按钮,你的数据就会再次填充,你的选择就会丢失。您可以调试它,在page_load函数中设置断点,并在单击按钮时观察其行为。IsPostBack检查页面是否作为提交从表单本身加载;由于对页面的第一次调用来自另一个页面,因此该属性为false。然后,在页面内部执行提交操作时,此属性为true。