编辑模式下DatagridView中的ComboBox

时间:2011-09-16 17:46:06

标签: c# winforms datagridview

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

3 个答案:

答案 0 :(得分:4)

请参阅ComboBox with read only behavior处的实施。

您还可以根据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;
}

可编辑:

Editable http://i51.tinypic.com/5e7o1w.jpg

只读:

ReadOnly http://i52.tinypic.com/1zgaxyt.jpg

答案 1 :(得分: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函数的可重入调用。

答案 2 :(得分:1)

如果要隐藏所选行的组合框,可以使用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