C# 设置DataGridViewComboxCell项

C# 设置DataGridViewComboxCell项,c#,datagridview,datagridviewcomboboxcell,C#,Datagridview,Datagridviewcomboboxcell,我想在我的DataGridView中分别设置每个DataGridViewComboxCell的项目(因为每个combobox必须有不同的项目)。我使用此代码设置项目: foreach (DataGridViewRow row in grid.Rows) { ((DataGridViewComboBoxCell)row.Cells[1]).Items.Clear(); foreach (Product prod in _ProductList) { ((Da

我想在我的DataGridView中分别设置每个DataGridViewComboxCell的项目(因为每个combobox必须有不同的项目)。我使用此代码设置项目:

foreach (DataGridViewRow row in grid.Rows)
{
    ((DataGridViewComboBoxCell)row.Cells[1]).Items.Clear();
    foreach (Product prod in _ProductList)
    {
        ((DataGridViewComboBoxCell)row.Cells[1]).Items.Add(prod.Name);
    }
}
调试我看到DataGridViewComboxCell的项目设置正确,但是当我查看网格时,组合是空的

在进行不同的测试时,我意识到,如果在加载表单后设置项目(例如,在单击事件中),项目将正常显示


要在表单加载时加载项,我应该做什么?

在什么函数中运行foreach循环?如果在构造函数中,那可能太早了。尝试将其移动到Form_Load或其他稍后运行的处理程序


我回答了一个关于设置列中组合框的当前值的问题,您可能会遇到类似的问题。我知道,如果在控件的生命周期中设置单元格的
数据源
足够晚,那么设置就会起作用,因为是我做的。

DataGridViewCombox是否附加了数据源。。我想知道是否将该特定项的数据源设置为string.Empty可以解决您的问题。。听起来像是一个数据绑定问题。看看这个链接,可能会选择备用数据源,然后通过这里的foreach循环设置要设置的项。这是另一个有用的链接,它将进一步解释。。或者,我尝试使用DataSource,而不是在while looop中设置项目。但问题依然存在。如果我设置DataGridViewComboBoxColumn而不是DataGridViewComboxCell,则网格中的项将正确填充,但此解决方案对我来说不可能,因为每个单元格都有不同的项..听起来这是可能的,但您需要做的是创建DataGridViewCoboxColumn的新实例。。这有意义吗?..为什么我需要创建DataGridViewComboxColumn的新实例?太好了!代码在构造函数上。。当我转到OnLoad方法时,它工作得非常好!这很好地解决了我的问题。非常感谢。我只是不明白为什么不可能在构造函数中填充combobox单元格。WinForms C#控件只是旧Windows C API调用的包装,带有它们的标志、消息和疯狂。在构建和加载之间,有各种各样的事情发生,其中之一可能是组合框选择的容器的构建。在构建之前,设置选项的调用(可能作为带有参数和内容的消息发送)只是被底层API忽略。这是基于Windows API模糊记忆的半途而废的解释,不应在生产代码中使用;)是的,在Load事件中填充DataGridViewComboxCell是有效的。但是,不要忘记设置DataSource、DisplayMember和ValueMember:
cellcb.DataSource=lstChoices;cellcb.DisplayMember=“CfgChoiceComboString”;cellcb.ValueMember=“CfgChoiceComboPos”