Как заставить ComboBox DataGridViewComboBoxColumn принимать новые элементы пользователя? - PullRequest
3 голосов
/ 20 сентября 2011

Используя DataGridViewComboBoxColumn , цель состоит в том, чтобы заставить комбинированные списки принимать новые элементы пользователя, а также возможность выбора элементов, которые уже присутствуют.

I 'мне известно об использовании EditingControlShowing события DataGridView для изменения DropDownStyle DataGridViewComboBoxEditingControl во время выполнения, чтобы разрешить это, но я 'Мне интересно, можно ли это сделать на более низком уровне.

Сейчас я занимаюсь расширением DataGridViewComboBoxColumn , DataGridViewComboBoxCell и DataGridViewComboBoxEditingControl ,в надежде изменить DropDownStyle EditingControl в тот момент, когда я его создаю.Пока что не повезло.

Отладчик показывает, что выполняется правильное назначение, но, тем не менее, 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

Ответы [ 2 ]

3 голосов
/ 26 ноября 2012

Вам необходимо установить DropDownStyle для DataGridView.EditingControl @ InitializeEditingControl для метода класса 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);
        }
    }
2 голосов
/ 20 сентября 2011

Я спорил с DataGridViewComboBox целую вечность. Это ужасно. В конце концов я использовал старый трюк создания ComboBox (без datagridview) во время выполнения и поместил его в сетку.

...