编辑模式下DatagridView中的ComboBox

我有一个DataGridView,只读模式设置为true(不可编辑),它从表单加载数据库获取值。 当我将只读模式设置为false(可编辑模式)时,我希望特定列(例如,Department)可以作为ComboBox显示,因此我可以从那里选择值。 当我进入只读模式时,ComboBox应该消失,DataGridView应该正常可见。 怎么实现呢? 我正在使用C#framework 4.0,Winforms

请参阅ComboBox上的实现, 其中包含只读行为 。

您还可以根据更改DataGridView属性的readonly时更改DisplayStyle 。 将DisplayStyle设置为DataGridViewComboBoxDisplayStyle.Nothing将隐藏下拉按钮。

例如,通过单击按钮更改ReadOnly属性将如下所示:

 private void mChangeReadOnlyButton_Click(object sender, EventArgs e) { ComboBoxColumn2.DisplayStyle = (dataGridView1.ReadOnly) ? DataGridViewComboBoxDisplayStyle.ComboBox : DataGridViewComboBoxDisplayStyle.Nothing; dataGridView1.ReadOnly = !dataGridView1.ReadOnly; } 

编辑:

可编辑http://sofzh.miximages.com/c%23/404.gif

只读:

ReadOnly http://sofzh.miximages.com/c%23/1zgaxyt.jpg

我得到了我的问题的解决方案,只是想在这里发布。 进入编辑模式时,运行以下代码可以解决问题。

 public void bgCombo(DataGridView dg) { foreach (DataGridViewRow row in dg.Rows) { DataGridViewComboBoxCell dgc = new DataGridViewComboBoxCell(); dgc.Value = row.Cells["Department"].Value; row.Cells["Department"] = dgc; } } 

在将dgc设置为dataGridCell之前,我们可以在其中添加项集合。 希望能帮助到你。

问题:如果列和行索引在编辑时变得相同,我收到错误 – 操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用。

如果要隐藏所选行的combobox,可以使用DataGridViewComboBoxDisplayStyle属性

选项包括ComboBox,DropdownBox或None

在示例中 – 如果第2列中有值,则仅显示第4列中的ComboBox

 For Each row As DataGridViewRow In dgv.Rows Dim Cell As DataGridViewComboBoxCell = CType(row.Cells(4), DataGridViewComboBoxCell) Cell.ReadOnly = True Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing If row.Cells(2).Value IsNot Nothing Then Cell.ReadOnly = False Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox End If Next