我在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'
有人可以帮我解决这个问题。
注意:我不想通过使用' MySqlDataReader'
来实现这一目标提前致谢。
答案 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