2012-03-27 56 views
0

我在从下拉框中获取正确的值时出现问题。基本上我所拥有的是一个带有下拉列表的程序,该列表填充了保存在数据库表中的名称。用户从下拉框中选择一个名称,然后单击一个按钮以从数据库中删除该名称。我遇到的问题是,无论选择哪个名称,都会从下拉框中删除名字(索引为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 [email protected] AND [email protected]", 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()); 
     } 
    } 
} 

任何帮助表示赞赏。

我真的不知道,如果页面没有被渲染首次为什么会改变什么,我想这个函数做什么应该改变。它在点击按钮后被调用,并且应该在表再次呈现之前采取该值。我会包括可装入()的情况下,它可以帮助:

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()); 
     } 
    } 
} 
+0

你打电话的地方在哪儿? – daryal 2012-03-27 06:05:10

+0

这是Page_Load()函数中的唯一代码 – Mike 2012-03-27 06:08:44

+0

您可以发布page_load函数吗? – daryal 2012-03-27 06:10:12

回答

2

你可能填充在Page_Load功能的下拉菜单,你没有Page.IsPostBack检查。因此,每次列表再次填充。将人口代码更改为如下所示:

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


    } 
+0

编辑和评论包含在编辑 – Mike 2012-03-27 06:00:57

0

尝试使用ddlNames.SelectedItem.Value代替。

+0

不会更改任何内容 – Mike 2012-03-27 06:02:53

相关问题