2012-11-30 47 views
0

我有什麼是我意識到的一個非常基本的問題,我試圖從所選擇的索引更改的DropDownList的值返回一個字符串值,但出於某些或其他原因它沒有發生。從dropDownlist控件返回字符串

protected void drpMinisters_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    name = drpMinisters.SelectedValue; 
    LabMessage.Text = name; 

} 

當我嘗試給數據庫添加名稱時,我得到一個NullReferenceException。

protected void butSubmitMinister_Click(object sender, EventArgs e) 
{ 
    int index = drpMinisters.SelectedIndex; 
    if (index == 0) 
    { 
     LabMessage.Text = "Please select a minister"; 
     return; 
    } 
    try 
    { 
     OleDbCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = @"INSERT INTO MinisterTable(MinisterName)VALUES(" + name + "')"; 
     cmd.ExecuteNonQuery(); 

     LabMessage.Text = "The record was successfully added"; 
     conn.Close(); 
    } 
    catch (Exception ex) 
    { 
     LabMessage.Text = ex.ToString(); 
    } 


} 

也許可以提供建議。

+0

你的意思是將selectedIndex事件不解僱?請提供更多細節。 – Sethu

+0

是的,奇怪的是,它看起來並沒有像selectedIndex被觸發 – Arianule

+0

selectedIndex_change不會觸發,當值字段在後續選擇中具有相同的值時。嘗試在下拉菜單中選擇唯一的值。 – Sethu

回答

2

我假設你連接對象conn上得到NullRefernceException在這條線:

OleDbCommand cmd = conn.CreateCommand(); 

請記住,所有對象(也是你name變量)設置在當前頁面生命週期的結束。您可以使用該控件的ViewState來維護回傳f.e中的值。您的DropDownListSelectedValue財產。

您還應該在使用它的地方創建連接,並且一旦完成就要立即處理它,最好使用using-聲明。否則,其他線程(請求)將需要創建一個新的物理連接,只要這仍然是開放的:

string sql = "INSERT INTO MinisterTable(MinisterName) VALUES(@MinisterName);"; 
using(var con = new OleDbConnection(connectionString)) 
using(var cmd = new OleDbCommand(sql, con)) 
{ 
    cmd.Parameters.AddWithValue("@MinisterName", drpMinisters.SelectedValue); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 
0

以及我不認爲你的問題是與數據庫的一部分,它實際上就在於你是如何得到選擇的值從你的下拉列表中。如果你想獲得實際出現在下拉列表中的字符串值,那麼你應該使用以下內容。

string name= (string)drpMinisters.SelectedItem; 

的情況下,要在組合框的文本區域中,然後使用SelectedText屬性