2012-11-30 3 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

를 사용하려면? 자세한 내용을 입력하십시오. – Sethu

+0

예, 이상하게도 selectedIndex가 실행되지 않은 것 같습니다. – Arianule

+0

결과 필드에서 값 필드의 값이 같으면 selectedIndex_change가 실행되지 않습니다. 드롭 다운 목록에서 고유 한 선택된 가치를 찾으십시오. – Sethu

답변

2

나는 당신이이 라인에 연결 개체 connNullRefernceException를 얻을 수 있다고 가정 :

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; 

당신은 당신이 selectedIndex의 이벤트가 해고되지 뜻 콤보 상자의 텍스트 영역의 텍스트가 다음 SelectedText 속성