C#从数据集中填充DataGridViewComboBoxCell,并从数据库中获取选定的值

本文关键字:获取 数据库 数据集 数据 集中 填充 DataGridViewComboBoxCell | 更新日期: 2023-09-27 18:19:48

我需要将数据库中的不同值添加到表1中的DataGridViewComboBoxColumn中(id、名称…),并且必须选择值(名称)。

我的代码:

SqlDataAdapter coursead = new SqlDataAdapter("select * from tbl_armycourses", longrollcon);
coursead.Fill(courseds, "tbl_armycourses");
for (int j = 0; j < ds5.Tables[0].Rows.Count; j++)
{
    DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(dataGridView5.Rows[j].Cells[0]);
    ComboColumn.DisplayMember = "course_name";
    ComboColumn.ValueMember = "armycourse_id";
    ComboColumn.DataSource = courseds.Tables["tbl_armycourses"];
}
for (int i = 0; i < ds5.Tables[0].Rows.Count; i++)
{
    int courseid = Convert.ToInt32(ds5.Tables[0].Rows[i]["course_id"]);
    dataGridView5.Rows.Add("..i want to add here selected index of comboboxcolumn..", ds5.Tables[0].Rows[i]["course_year"], ds5.Tables[0].Rows[i]["course_grading"], ds5.Tables[0].Rows[i]["course_auth"]);
}

C#从数据集中填充DataGridViewComboBoxCell,并从数据库中获取选定的值

如果ComboBoxColumn作为第一列添加到DataGridView中,那么添加单元格的值就足够了,然后它将在组合框中显示为选中:

dataGridView5.Rows.Add(Convert.ToInt32(ds5.Tables[0].Rows[i]["course_id"]), 
                       ds5.Tables[0].Rows[i]["course_year"],
                       ds5.Tables[0].Rows[i]["course_grading"], 
                       ds5.Tables[0].Rows[i]["course_auth"]);

请注意,该值应该存在于组合框中,否则您将收到异常。

此外,您应该以这种方式填充组合框列,不需要循环:

SqlDataAdapter coursead = new SqlDataAdapter("select * from tbl_armycourses", longrollcon);
coursead.Fill(courseds, "tbl_armycourses");
var ComboColumn= (DataGridViewComboBoxColumn)dataGridView5.Columns[0];
ComboColumn.DisplayMember = "course_name";
ComboColumn.ValueMember = "armycourse_id";
ComboColumn.DataSource = courseds.Tables["tbl_armycourses"];

请注意,第一列的类型应该是DataGridViewComboBoxColumn,否则您将收到一个异常。

注意:
通常,我建议您使用数据绑定,例如到DataTable,并且不要以这种方式添加行。Windows窗体中最好的功能之一是使用DesignerDataBinding