DataGridView中编辑模式下的ComboBox

5

我有一个DataGridView,只读模式设置为true(不可编辑),它在表单加载时从数据库中获取值。当我将只读模式设置为false(可编辑模式)时,我希望特定列(例如Department)作为ComboBox可见,以便我可以从中选择值。当我进入只读模式时,ComboBox应该消失,DataGridView应该像正常情况下一样可见。如何实现呢? 我正在使用C#框架4.0,Winforms


“disappear”是什么意思?您想要隐藏整个列,还是只想禁用下拉列表框(即用户无法从下拉列表框中选择下拉列表)? - SwDevMan81
我的意思是,DataGridView处于正常模式,ComboBox消失但列仍然存在。 - Sandy
3个回答

5
请查看此处的实现。
您还可以根据DataGridView属性的只读状态更改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;
}

可编辑:

可编辑

只读:

只读


我其实已经找到了解决方案,但非常抱歉,我不小心把它删除了。现在我已经恢复了它。对此给您带来的麻烦深感抱歉。但是在我的解决方案中,当行索引和列索引相同时,我遇到了问题。您提供的解决方案对我很有帮助。谢谢。 - Sandy

1

我找到了解决问题的方法,想在这里发布一下。进入编辑模式后,运行以下代码可能会解决问题。

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函数的重入调用。


我喜欢这篇文章。在网上找到的其他东西都冗长、混乱,而且不是我想要的。真是救命稻草! :) - Sellorio
我很高兴能得到这样的评论 :) - Sandy

1
如果您想为选定的行隐藏组合框,可以使用 DataGridViewComboBoxDisplayStyle 属性。
选项包括 ComboBox、DropdownBox 或 None。
例如,在第 4 列中仅在第 2 列有值时显示 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接