2012-03-27 32 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

相關問題