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

标签 c# winforms datagridview datagridviewcolumn datagridviewcomboboxcell

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

我的代码:

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"]);
}

最佳答案

如果 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 否则你会收到一个异常。

注意:
一般来说,我建议您使用数据绑定(bind) - 例如 DataTable - 并且不要以这种方式添加行。 Windows 窗体中最好的功能之一是使用 Designer 和使用 DataBinding

关于C# 从数据集中填充 DataGridViewComboBoxCell 并从数据库中获取选定的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411491/

相关文章:

c# - 仅允许 TLS 1.0 后仍然可以进行 TLS 1.2 握手

c# - 没有任何特殊字符的 10 位数字的正则表达式

c# - 使用带有固定位置文本的 ScrollableControl 的自定义控件

c# - 如何更改datagridview 选定行的背景颜色?

C# WriteAttributeString - 多元素

c# - 并行数据处理

c# - MVVM 中的双向数据绑定(bind)问题

c# - 如何为 mdi 容器创建函数

c# - 如何禁用单元格上的编辑模式但复选框列?

C#,DataGridView - 选择新行后包含垃圾