2011-09-19 63 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