【问题标题】:ComboBox in DatagridView in Edit Mode编辑模式下 DatagridView 中的 ComboBox
【发布时间】:2011-09-16 17:46:05
【问题描述】:

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

【问题讨论】:

  • disappear 是什么意思?您希望隐藏整个列,或者只禁用组合框(即用户无法从组合框中选择下拉列表?
  • 我的意思是,datagridview 处于正常模式,组合框消失,但列不出现。

标签: c# winforms datagridview


【解决方案1】:

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

可编辑:

只读:

【讨论】:

  • 我实际上得到了我的解决方案,但真的很抱歉,我错误地删除了它。我现在取消删除它。抱歉麻烦。但是在我的解决方案中,当我的 rowindex 和 columnindex 相同时,我遇到了问题。你的解决方案对我来说很好。谢谢。
【解决方案2】:

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

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 之前,我们可以在其中添加项目集合。希望对您有所帮助。

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

【讨论】:

  • 我喜欢这篇文章。我在网上找到的所有其他内容都是冗长而令人困惑的,并不是我真正想要的。救生员!! :)
  • 我很高兴有这样的评论:)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2012-04-05
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多