2011-09-19 62 views
3

使用DataGridViewComboBoxColumn,目标是使ComboBoxes接受用户的新项目以及选择已存在项目的可能性。如何使DataGridViewComboBoxColumn的组合框接受用户新项目?

我知道使用EditingControlShowing的的DataGridView事件改变DataGridViewComboBoxEditingControlDropDownStyle在运行时允许这样做,但我不知道这是否可以以较低的完成水平。

我现在正在做的是延长DataGridViewComboBoxColumn的DataGridViewComboBoxCellDataGridViewComboBoxEditingControl,希望改变使用编辑的DropDownStyle在我实例的那一刻。到目前为止,没有运气。

的调试器显示正在执行的权利分配,但尽管如此,在DropDownStyle是在EditingControlShowing弹出(使用事件用于调试目的)作为DropBoxList,不升降梭箱,这是意图。

下面就跟随类:

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

我认为与DataGridViewComboBox的年龄。这太可怕了。我最终使用了在运行时创建(非datagridview)组合框并将其浮动到网格上的旧技巧。

+0

这是一个可能性,谢谢,尽管我希望成千上万的细胞在这个DataGridView中,不是所有的组合框,但尽管如此,很多定位。 – didi

3

您需要设置Inherted细胞类DataGridView.EditingControl @ InitializeEditingControl方法的DropDownStyle

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); 
     } 
    } 
+0

要使用这个,只需指定DataGridViewComboBoxColumn的模板,例如'col.CellTemplate = new DataGridViewComboBoxCellExtended();'(此外,'DataGridViewComboBoxEditingControlExtended'不需要,可以使用'DataGridViewComboBoxEditingControl'代替)。 – Loathing