C#从SQL DataTable填充combobox

DataTable _dt = new DataTable(); using (SqlConnection _cs = new SqlConnection("Data Source=COMNAME; Initial Catalog=DATABASE; Integrated Security=True")) { string _query = "SELECT * FROM Doctor"; SqlCommand _cmd = new SqlCommand(_query, _cs); using (SqlDataAdapter _da = new SqlDataAdapter(_cmd)) { _da.Fill(_dt); } } cbDoctor.DataSource = _dt; foreach(DataRow _dr in _dt.Rows) { cbDoctor.Items.Add(_dr["name"].ToString()); } 

有一个错误…

结果是System.Data.DataRowView而不是数据库中的数据..

我还不确定代码中的确切错误是什么,但是如果你没有使用DataTable ,你可以这样做:

 using (SqlConnection sqlConnection = new SqlConnection("connstring")) { SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Doctor", sqlConnection); sqlConnection.Open(); SqlDataReader sqlReader = sqlCmd.ExecuteReader(); while (sqlReader.Read()) { cbDoctor.Items.Add(sqlReader["name"].ToString()); } sqlReader.Close(); } 

有关更多信息,请参阅MSDN上的SqlDataReader参考 。

在我们发布的原始代码中找到问题,请提供您获得exception的哪一行的信息(或者是否是阻止应用程序编译的错误?)以及它的整个消息是什么。

您还可以将combobox的DisplayMember属性指定为任何列名。 例如,如果要显示“名称”字段,则可以执行此操作

 Combobox1.DisplayMember="Name"; 

我认为问题是你试图在一个comboBox中插入多个列(它只能接受一列)。 调整SELECT语句,使其将所需的所有数据合并到一列中:

示例:’SELECT Name +”LastName +”+ ID AS’DoctorData’FROM Doctor’

通过使用+运算符,您可以组合数据库中的多个列,并将其表示为单个数据。 我认为你的代码应该在那之后工作(你甚至可以评论foreach循环,我认为将数据源添加到你的comboBox就足够了)