无法从下拉列表中获取值,c#

时间:2014-04-21 18:24:06

标签: c# postgresql drop-down-menu

在页面加载中,我正在使用SQL加载一个带有postgreSQL数据库名称的下拉列表。 稍后在代码中我想将下拉列表中的选定值保存为字符串变量。 这不会发生。发生的事情是列表中的第一个值(索引0)总是保存,无论我选择了哪个。

Heres是页面加载(工作正常):

 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;

1 个答案:

答案 0 :(得分: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干扰控件的状态。