gpt4 book ai didi

c# - 如何在 DataGridViewComboBoxCell 中选择一个值?

转载 作者:太空狗 更新时间:2023-10-29 19:58:36 25 4
gpt4 key购买 nike

我有 DataGridViewComboBoxCell 和一个 DataTable。 Table I中的数据使用DataSource绑定(bind)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 = ...;但它给出了一个异常(exception)。并尝试过

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

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

表单已加载,单元格为空。

Form loaded and I have empty cell.

还有 ComboBox 中的一些数据。

And some data in the ComboBox.

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

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

The value "1" in the ID column corresponds to the value "Second" in the Items column.So, I get the correct result.

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

最佳答案

不要向网格中添加单元格,而是添加 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 绑定(bind)到网格的数据源。

c.DataPropertyName = "GridDataSourceColumnName";

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


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

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

关于c# - 如何在 DataGridViewComboBoxCell 中选择一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com