3

DataGridViewComboBoxColumnを使用する目的は、ComboBoxにユーザーの新しいアイテムを受け入れさせ、すでに存在するアイテムを選択できるようにすることです。

DataGridViewのEditingControlShowingイベントを使用して、実行時にDataGridViewComboBoxEditingControlのDropDownStyleを変更してこれを許可することを知っていますが、これをより低いレベルで実行できるかどうか疑問に思っています。

私が今していることは、DataGridViewComboBoxColumn、DataGridViewComboBoxCell、およびDataGridViewComboBoxEditingControlを拡張インスタンスした瞬間にEditingControlのDropDownStyleを変更することを望んでいます。これまでのところ、運はありません。

デバッガーは正しい割り当てが実行されていることを示しますが、それでも、DropDownStyleEditingControlShowingで(デバッグ目的でイベントを使用して)DropBoxではなく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
4

2 に答える 2

3

継承されたセルクラスの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);
        }
    }
于 2012-11-26T12:16:46.270 に答える
2

私は何年も DataGridViewComboBox について議論してきました。それはひどいです。私は最終的に、実行時に (非データグリッドビュー) ComboBox を作成し、それをグリッド上に浮かせるという古いトリックを使用しました。

于 2011-09-20T01:31:09.180 に答える