8

我有 DataGridViewComboBoxCell 和一个 DataTable。表中的数据我使用DataSource与DataGridViewComboBoxCell绑定,并设置ValueMember和DisplayMember。

private void Form1_Load(object sender, EventArgs e)
{         
    DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell();

    dataGridView1.Rows[0].Cells[0] = comboBoxCell;

    comboBoxCell.DataSource = dataTable;
    comboBoxCell.ValueMember = "ID";
    comboBoxCell.DisplayMember = "Item";
}

如何在表单加载时以编程方式设置单元格中的值?在简单的 ComboBox 中,我知道一个属性 SelectedIndex。我试过 comboBoxCell.Value = ...; 但它给出了一个例外。并尝试过

private void dataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e)
{
    e.Value = 1;
}

它在单元格中设置了一个新值,但我需要选择一个值。

表单已加载,我有空单元格。

表单已加载,我有空单元格。

以及 ComboBox 中的一些数据。

以及 ComboBox 中的一些数据。

当我将此代码放在dataGridView1.Rows[0].Cells["ComboColumn"].Value = "1";comboBoxCell.DisplayMember = ...(见上文)之后,它工作正常。

ID 列中的值“1”对应于 Items 列中的值“Second”。所以,我得到了正确的结果。

价值

对不起我的英语和我的新手代码:)

4

1 回答 1

17

不要在网格中添加单元格,而是添加一DataGridViewComboBox列。

DataGridViewComboBoxColumn c = new DataGridViewComboBoxColumn();
c.Name = "ComboColumn";
c.DataSource = dataTable;
c.ValueMember = "ID";
c.DisplayMember = "Item";
dataGridView1.Columns.Add(c);

要选择特定值,请设置给定单元格的 Value 属性。

dataGridView1.Rows[rowIndexYouWant].Cells["ComboColumn"].Value = 1;
  • 注意这里的类型很重要!在评论中你说你得到一个System.FormatException. 这可能是由于为该值设置了错误的类型。

    当您将值设置为 1 时,您正在分配一个 int - 如果由于某种原因您在 ID 列中有字符串,您将得到System.FormatException您所看到的异常。

    如果类型不同,您需要更新 DataTable 定义或将值设置为字符串:

    dataGridView1.Rows[rowIndexYouWant].Cells["ComboColumn"].Value = "1";
    
  • 另请注意,此值必须存在于您已设置为网格源的 DataTable 的 ID 列中。

DataGridView当它有它的 DataSource 集时,通常最容易使用它。在这种情况下,您可以使用 DataPropertyName 属性将 ComboBoxColumn 绑定到网格的 DataSource。

c.DataPropertyName = "GridDataSourceColumnName";

这允许从网格数据源中获取列值,并对列进行更改以直接更改该数据源。


最后,不要在此处使用 CellFormatting 事件 - 此事件不适用于此类用途。通常最好在 DataBindingComplete 事件(如果您只希望它完成一次)中或在需要 DefaultValues 或 RowValidating 之类的某些事件中执行此类工作。

通过使用 CellFormatting,您可能会使用户无法手动编辑组合框。

于 2012-07-25T19:43:01.280 回答