为什么我的下拉列表显示“ System.Data.DataRowView”而不是真实值?

时间:2019-03-09 16:50:43

标签: c#

我试图在下拉列表中获取数据,但它不起作用。我不明白是什么问题。

string connString = @" Data Source=(LocalDB)\v11.0;AttachDbFilename='C:\Users\oshri\Documents\Stock scores.mdf';Integrated Security=True;Connect Timeout=30";
string queryLecturer = "select name_student from student";
SqlConnection conn = new SqlConnection(connString);
//SqlCommand cmdL = new SqlCommand(queryLecturer, conn);
conn.Open();
//SqlCommand SQLCommand = new SqlCommand();
//cmdL.CommandType = CommandType.Text;
//SQLCommand.CommandText = queryLecturer;
//conn.Close();
SqlDataAdapter adapter = new SqlDataAdapter(queryLecturer, conn);
adapter.Fill(subjects);

DropDownListID.DataSource = subjects;
DropDownListID.DataBind();

DropDownListID.DataBind();  
conn.Close();

1 个答案:

答案 0 :(得分:1)

您正在为下拉列表分配一个包含DataSet个项目的DataRowView。您的下拉列表(是System.Windows.Forms.ComboBox吗?)不够聪明,无法从此DataSet中提取实际值。而是使用SqlDataReader来读取您的字符串值,并将它们添加到列表中,您可以将其用作下拉列表的数据源。

string connString = @"Data Source=...";
string queryLecturer = "select name_student from student";
using (var conn = new SqlConnection(connString))
using (var cmd = new SqlCommand(queryLecturer)) {
    conn.Open();
    using (SqlDataReader reader = cmd.ExecuteReader()) {
        var list = new List<string>();
        while (reader.Read()) {
            list.Add(reader.GetString(0)); // 0 is the column index.
        }
        DropDownListID.DataSource = list;
    }
}

using语句自动关闭连接并在语句块末尾分配资源。即使由于异常或breakreturn语句而导致语句块过早离开,它们也会这样做。