使用 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
答案 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并将其浮动到网格上的旧技巧。