C# 设置ComboBoxColumn DataGridView的值

C# 设置ComboBoxColumn DataGridView的值,c#,winforms,C#,Winforms,我有个问题。我有一个ComboBoxColumn,希望通过ComboBoxColumn中的变量从数据库中填充数据。我怎样才能做到这一点 我试过的这个片段不起作用 ComboBoxColumn.Items.AddRange("One", "Two", "Three", "Four"); 我的问题是在另一个函数中获取数据,该函数将保存ComboBox变量(每个函数都有权访问)中的所有值,并且我希望通过列/行索引填充Da

我有个问题。我有一个
ComboBoxColumn
,希望通过
ComboBoxColumn
中的
变量从数据库中填充数据。我怎样才能做到这一点

我试过的这个片段不起作用

ComboBoxColumn.Items.AddRange("One", "Two", "Three", "Four");
我的问题是在另一个函数中获取数据,该函数将保存ComboBox变量(每个函数都有权访问)中的所有值,并且我希望通过列/行索引填充DataGridView中的单元格,如下所示:

private ComboBox ComboBoxItems

private void datagridview_CellClick(object sender, DataGridViewCellEventArgs e)
{
    try
    {
        int col1 = datagridview.Columns["datagridview_col1"].Index;
        int col2 = datagridview.Columns["datagridview_col2"].Index;
        int col3 = datagridview.Columns["datagridview_col2"].Index;

        if ((e.ColumnIndex == col1))
        {

            fill_col2();
        }
        else if ((e.ColumnIndex == col2))
        {
            datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = ComboBoxItems1;

            foreach (var item in ComboBoxItems1.Items)
            {
                Console.WriteLine(ComboBoxItems1.Items.Count);
                Console.WriteLine(item.ToString());
            }

            if (!String.IsNullOrEmpty(section))
            {
                fill_col3();
            }
        }
        else if ((e.ColumnIndex == col3))
        {
            datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = ComboBoxItems2;
        }

    }
    catch (Exception ex)
    {
        MessageBox.Show("Error loading Data!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

有人有好的工作解决方案吗?

如果要设置ComboboxColumn数据源,可以在定义ComboxColumn时进行设置

var ComboCol= new DataGridViewComboBoxColumn
{
    HeaderText = "ComboCol",
    Name = "ComboCol",
    DataSource = new List<string> {"One", "Two", "Three", "Four"}
};

希望这能对您有所帮助。

我有两个问题。1) 您希望网格“每一”行中的“每一”组合框包含每一行的相同值还是不同值?2) 绑定到网格的数据源是否有组合框中某个项的字段?换句话说,组合框项目是否连接到“网格”数据源?示例:如果组合框列仅用于显示(未连接),则用户选择的组合框项不会保存到数据源中。你能澄清一下吗?我希望每一行中的每个组合框,第一个组合框等于如果用户选择不同的值,它应该只更改我更改组合框的行。所以第一个组合框总是相等的。2) 我将数据库中的数据读取到DataTable中,并将表中的每一行填充到一个ComboBox变量中,我希望该变量显示在ComboBoxColumn中。我没有关注您最后的注释。保持简单,假设网格中有一个数据网格视图组合框列。网格中的“每个”行在该列中都有一个组合框单元格。从这里你可以做两件事中的一件…1)用“相同”的值填充每行上的“每个”组合框…或…2)用“不同”的值填充每行上的“每个”组合框。如果每个组合框行中的值相同,则每次用户单击组合框单元格时填充/重新填充“每个”组合框…是不必要的,也是浪费。我假设您希望所有组合包含相同的值。如果值都相同,则设置
DataGridViewComboBoxColumn
DataSource
,它将处理每个单元格,您只需设置一次。我假设这就是您所说的…“我有一个ComboBox列,希望通过该列中的ComboBox变量从数据库中填充数据”…不清楚您所说的“通过ComboBox”…如果您有一个现有的
ComboBox
“with”一个现有的
数据源
…然后将其数据源复制到grids组合框列数据源。这是非常简单的,但是,我仍然无法判断组合框列是否应该“绑定”到“grids”数据源中的特定“列”?如果是,那么您将需要额外的步骤来检查并确保数据库值都包含在值的组合框列表中,否则,几乎可以保证网格可怕的
DataError
DataSet ds;
string connetionString = @"Connection String";
using (SqlConnection conn = new SqlConnection(connetionString))
{
    SqlDataAdapter sda = new SqlDataAdapter("Select * From TestTable", conn);
    ds = new DataSet();
    sda.Fill(ds, "TableName");
}

DataGridViewComboBoxCell ComboCell;

foreach (DataRow row in ds.Tables[0].Rows)
{
    int index = dataGridView1.Rows.Add();
    dataGridView1.Rows[index].Cells["CommonCol1"].Value = row[0];

    ComboCell= (DataGridViewComboBoxCell)(dataGridView1.Rows[index].Cells["ComboCol"]);
    ComboCell.Value = row[1].ToString();
}