【问题标题】:Set Value of ComboBoxColumn DataGridView设置 ComboBoxColumn DataGridView 的值
【发布时间】:2020-08-04 09:36:15
【问题描述】:

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

我试过的这个sn-p不起作用

ComboBoxColumn.Items.AddRange("One", "Two", "Three", "Four");

我的问题是我在另一个函数中获取数据,该函数将保存 ComboBox 变量中的所有值(每个函数都可以访问)并且我想通过 Column-/Row-Index 填充 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);
    }
}

有没有人想出一个好的工作解决方案?

【问题讨论】:

  • 我有两个问题。 1)您希望网格的“每一”行中的“每一”组合框包含相同的值还是每一行的不同值? 2) 您绑定到网格的数据源是否具有组合框中项目之一的字段?换句话说,组合框项目是否连接到“网格”数据源?例如,如果组合框列仅用于显示(未连接),则用户选择的组合框项目不会保存到数据源中。你能澄清一下吗?
  • 我想要每行中的每个 ComboBox,第一个 ComboBox 等于如果用户选择不同的值,它应该只更改我更改组合框的行。所以第一个 ComboBoxes 总是相等的。 2) 我将数据库中的数据读入 DataTable 并将表中的每一行填充到我想在 ComboBoxColumn 中显示的 ComboBox 变量中。
  • 我没有关注您的最后评论。保持简单,假设您在网格中有一个数据网格视图组合框列。网格中的“每一行”在该列中都有一个组合框单元格。从这里你可以做两件事之一……1)用“相同”值填充每行上的“每个”组合框……或……2)用“不同”值填充每行上的“每个”组合框。如果每个组合框行中的值都相同,那么每次用户单击组合框单元格时填充/重新填充“每个”组合框......是不必要且浪费的。我假设您希望所有组合都包含相同的值。
  • 如果值都相同,则设置DataGridViewComboBoxColumnDataSource,它将处理每个单独的单元格,您只需设置一次。我假设这就是您的意思……“我有一个 ComboBoxColumn,并希望通过此列中的 ComboBox 变量填充数据库中的数据”……不清楚您所说的“通过 ComboBox”是什么意思……如果您有一个现有的ComboBox“和”一个现有的DataSource…然后将其数据源复制到网格组合框列数据源。
  • 这一切都很简单,但是,我仍然无法判断组合框列是否应该“绑定”到“网格”数据源中的特定“列”?如果是,那么您将需要一个额外的步骤来检查并确保数据库值都包含在值的组合框列表中,否则,几乎可以保证可怕的网格DataError

标签: c# winforms


【解决方案1】:

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

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

然后在用数据库中的数据填充组合框之前,您需要先将单元格转换为DataGridViewComboBoxCell

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();
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2023-03-16
    • 2011-04-23
    • 2015-01-27
    • 2015-05-21
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多