如何使DataGridViewComboBoxColumn的ComboBox接受用户新项目?

时间:2011-09-19 22:51:44

标签: vb.net datagridview datagridviewcombobox

使用 DataGridViewComboBoxColumn ,目标是让 ComboBoxes 接受用户的新项目以及选择已经存在的项目的可能性。

我知道使用 DataGridView EditingControlShowing 事件来更改 DataGridViewComboBoxEditingControl DropDownStyle 运行时允许这样做,但我想知道这是否可以在较低级别完成。

我现在正在做的是扩展 DataGridViewComboBoxColumn DataGridViewComboBoxCell DataGridViewComboBoxEditingControl ,希望改变 EditingControl的DropDownStyle 在我实例化它的那一刻。到目前为止,没有运气。

调试器显示正在执行正确的赋值,但是 DropDownStyle 会在 EditingControlShowing (使用该事件进行调试)中弹出 DropBoxList ,而不是 DropBox ,这是意图。

遵循以下课程:

Public Class DataGridViewComboBoxColumnALT
    Inherits System.Windows.Forms.DataGridViewComboBoxColumn

    Public Sub New()
        Me.CellTemplate = New DataGridViewComboBoxCellALT
    End Sub
End Class

Public Class DataGridViewComboBoxCellALT
    Inherits System.Windows.Forms.DataGridViewComboBoxCell
    Public Overrides ReadOnly Property EditType() As Type
        Get
            Return GetType(DataGridViewComboBoxEditingControlALT)
        End Get
    End Property
End Class

Public Class DataGridViewComboBoxEditingControlALT
    Inherits System.Windows.Forms.DataGridViewComboBoxEditingControl
    Implements System.Windows.Forms.IDataGridViewEditingControl
    Public Sub New()
        MyBase.New()
        Me.DropDownStyle = ComboBoxStyle.DropBox
    End Sub
End Class

2 个答案:

答案 0 :(得分:3)

你需要设置DataHridView.EditingControl的DropDownStyle @InvertedEditingControl方法的Inherted单元类

class DataGridViewComboBoxCellExtended : DataGridViewComboBoxCell
{
    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);            
        ((DataGridViewComboBoxEditingControlExtended)DataGridView.EditingControl).DropDownStyle = ComboBoxStyle.DropDown;
    }
    public override Type EditType
    {
        get
        {
            return typeof(DataGridViewComboBoxEditingControlExtended);
        }
    }

答案 1 :(得分:2)

我与DataGridViewComboBox争论了很多年。太可怕了。我最终使用了在运行时创建(非datagridview)ComboBox并将其浮动到网格上的旧技巧。