首页 文章

编辑模式下DatagridView中的ComboBox

提问于
浏览
5

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

3 回答

  • 1

    请参阅ComboBox with read only behavior的实施 .

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

    编辑:

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

    只读:

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

  • 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函数的可重入调用 .

  • 4

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

相关问题