3

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

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

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

调试器显示正在执行正确的分配,但尽管如此,DropDownStyleEditingControlShowing处弹出(使用该事件进行调试)作为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
4

2 回答 2

3

需要设置DataGridView.EditingControl的DropDownStyle @Inherted cell类的InitializeEditingControl方法

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);
        }
    }
于 2012-11-26T12:16:46.270 回答
2

我与 DataGridViewComboBox 争论了很久。太可怕了。我最终使用了在运行时创建(非数据网格视图)组合框并将其浮动在网格上的旧技巧。

于 2011-09-20T01:31:09.180 回答