组合框显示system.data.datarowview

时间:2015-08-27 17:46:01

标签: c# mysql winforms combobox

我在winform中有一个组合框,通过调用MySQL中的存储过程来获取数据。

我的存储过程:

CREATE PROCEDURE `GetCourses`()
BEGIN
SELECT course_name FROM my_db.courses where group_id=1;
END

现在课程名称与Combobox(ComboBox2)绑定如下 - 选择另一个Combobox(ComboBox1):

private void Form_Load(object sender, EventArgs e)
{
  var connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  conn = new MySqlConnection(connectionString);
  conn.Open();
  MySqlCommand cmd1 = new MySqlCommand();
  cmd1.Connection = conn;
  cmd1.CommandType = CommandType.StoredProcedure;
  cmd1.CommandText = "GetCourses";
  DataTable dt1 = new DataTable();
  MySqlDataAdapter adp1 = new MySqlDataAdapter(cmd1);
  adp1.Fill(dt1);
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  if (comboBox1.SelectedIndex == 3)
  {
    comboBox2.ValueMember = "course_name";
    comboBox2.DisplayMember = "course_name";
    comboBox2.DataSource = dt1;
  }
}

但是当我运行表单时,ComboBox会填充值&system; system.data.datarowview'

Form

有人可以帮我解决这个问题。

注意:我不想通过使用' MySqlDataReader'

来实现这一目标

提前致谢。

2 个答案:

答案 0 :(得分:1)

这可以通过以下两行代码解决。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  if (comboBox1.SelectedIndex == 3)
  {
    foreach (DataRow row in dt1.Rows)
      comboBox2.Items.Add(row["course_name"]);
  }
}    

答案 1 :(得分:0)

您可以将数据投影到具有命名字段的集合中,以防止数据行对象的默认ToString():

comboBox2.ValueMember = "course_name";
comboBox2.DisplayMember = "course_name";

修改

我认为你应该把这些行放在Load事件中。您不需要多次设置它们,这可能是组合框显示获取对象的ToString()结果而不是单个属性的原因。

Windows.Media.Devices.MediaDevice.GetDefaultAudioCaptureId