Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编辑模式下DatagridView中的组合框_C#_Winforms_Datagridview - Fatal编程技术网

C# 编辑模式下DatagridView中的组合框

C# 编辑模式下DatagridView中的组合框,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个只读模式设置为true(不可编辑)的DataGridView,它在表单加载时从数据库获取值。当我将只读模式设置为false(可编辑模式)时,我希望特定列(例如Department)显示为组合框,以便从中选择值。当我进入只读模式时,组合框应该消失,DataGridView应该正常可见。如何实现? 我使用的是C#framework 4.0,Winforms我得到了问题的解决方案,只是想把它发布在这里。进入编辑模式时,运行以下代码可以解决问题 public void bgCombo(DataG

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

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

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

请参阅上的实现

您还可以根据
DataGridView
属性的只读更改。将显示样式设置为将隐藏下拉按钮

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

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

只读:


如果要隐藏选定行的组合框,可以使用DataGridViewComboBoxDisplayStyle属性

选项有组合框、下拉框或无

在示例中-如果第2列中有值,则仅显示第4列中的组合框

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

你所说的消失是什么意思?您希望隐藏整个列,或者仅禁用组合框(即,用户无法从组合框中选择下拉列表?我的意思是,datagridview处于其正常模式,而组合框不在列中。事实上,我得到了我的解决方案,但非常抱歉,我错误地删除了它。我现在取消了删除。很抱歉,遇到了麻烦。但在我的解决方案中,当我的rowindex和columnindex相同时,我面临着问题。你的解决方案对我来说很好。谢谢。我喜欢这篇文章。我在网上找到的所有东西都冗长而混乱,并不是我真正想要的。救生员!!:)我很高兴有这样的评论:)