2012-02-13 119 views
0

我想在我的DataGridView中分别设置每个DataGridViewComboBoxCell的项目(因为每个组合框必须有不同的项目)。我用这个代码来设置项目:设置DataGridViewComboBoxCell项目

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

调试我看到的DataGridViewComboBoxCell的项目设置正确,但是当我看到网格,组合技是空的。

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

我应该如何在表单加载时加载项目?

+0

DataGridViewCombox有一个DataSource连接到它..我想知道是否将该特定项目的数据源设置为string.Empty将解决您的问题..听起来像一个DataBinding问题看这个链接可能选择备用DataSource然后设置您试图通过foreach循环设置的项目,你有http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcell.aspx – MethodMan 2012-02-13 15:54:20

+0

这是另一个有用的链接,将解释它甚至更多.. http://homepage.ntlworld.com/herring1/datagrid.html – MethodMan 2012-02-13 15:59:07

+0

或者我尝试使用DataSource而不是在一段时间内设置项目。但问题依然如故。 如果我将DataGridViewComboBoxColumn设置为DataGridViewComboBoxCell,则网格中的项目已正确填充,但此解决方案对我来说不可行,因为每个单元格都有不同的项目。 – joaocarlospf 2012-02-13 17:31:58

回答

1

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

我回答了有关在列here中设置组合框当前值的问题,并且您可能遇到类似问题。我知道如果您在控件的生命周期中进行的时间足够晚,请设置单元格的DataSource作品,因为我已经做到了here

+0

完美!代码在构造函数中..当我转向OnLoad方法时,它完美地工作!这很好地解决了我的问题。非常感谢。 – joaocarlospf 2012-02-13 23:24:22

+0

我只是不明白为什么不可能在构造函数中填充组合框.. – joaocarlospf 2012-02-13 23:25:10

+0

WinForms C#控件只是用旧的Windows C API调用的标志和消息以及疯狂的包装。在建筑和装载之间有各种各样的东西发生在罩下,其中一件事可能是为组合框选择容器的构造。在构建之前,设置选项的调用(可能被调度为带有参数和东西的消息)只会被底层API忽略。这是基于Windows API模糊回忆的半分析解释,不应用于生产代码;) – 2012-02-14 14:53:24