2014-04-21 29 views
0

在頁面加載中,我正在使用SQL從PostgreSQL數據庫加載包含名稱的下拉列表。 在後面的代碼中,我想將下拉列表中的選定值保存到字符串變量中。 這不會發生。無論我選擇了什麼,列表中的第一個值(索引0)總是會保存。無法從下拉列表中獲取值,c#

繼承人是頁面加載(正常工作):

protected void Page_Load(object sender, EventArgs e) 
{ 
    NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=SYS;User Id=postgres;Password=postgres;"); 
    conn.Open(); 
    NpgsqlCommand command = new NpgsqlCommand("SELECT name FROM tbl_syv ORDER BY name", conn); 
    NpgsqlDataReader dr = command.ExecuteReader(); 
    while (dr.Read()) 
    { 
     ddPersons.Items.Add((string)dr["name"] + " " + " "); 
    } 
} 

這裏的button1_Click。我想將選定的值保存到字符串變量syv

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string syv = ddPersons.SelectedItem.Text; 
    string name = txtName.Text; 
    int studentid = 0; 

    NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=sSYS;User Id=postgres;Password=postgres;"); 
    conn.Open(); 

    string sql = "SELECT id FROM tbl_student WHERE name = '" + name + "'"; 
    NpgsqlCommand command = new NpgsqlCommand(sql, conn); 
    NpgsqlDataReader dr = command.ExecuteReader(); 
    while (dr.Read()) 
    { 
     studentid = (int)dr["id"]; 

    } 
} 

我已經試過

string syv = ddPersons.SelectedItem.Text; 
string syv = ddPersons.SelectedItem.Value; 
string syv = ddPersons.Text; 
string syv = ddPersons.SelectedValue; 
+0

try:ddPersons.SelectedValue.ToString(); –

回答

2

這可能是ViewState是保存網頁的狀態。你爲什麼不包含在你的Page_Load方法如下一行:

if (!IsPostBack) 
{  
    NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=SYS;User Id=postgres;Password=postgres;"); 
    conn.Open(); 
    NpgsqlCommand command = new NpgsqlCommand("SELECT name FROM tbl_syv ORDER BY name", conn); 
    NpgsqlDataReader dr = command.ExecuteReader(); 
    while (dr.Read()) 
    { 
     ddPersons.Items.Add((string)dr["name"] + " " + " "); 
    } 
} 

這將防止在Page_Load每有人點擊該按鈕,並禁止ViewState中與控件的狀態干涉的時間來填充重複的項目。

+0

謝謝!這工作正常! – user2939293