Для этого есть несколько шагов, позволяющих аккуратно встроить пользовательский элемент управления в DataGridView в качестве элемента редактирования, используемого ячейкой в этой сетке.
Во-первых, , вам потребуетсянаписать класс, который наследует от вашего пользовательского элемента управления , а реализует IDataGridViewEditingControl.Это дает вам класс DataGridViewEditingControl, инкапсулирующий ваш пользовательский элемент управления.Назовите его CustomDataGridViewEditingControl
Некоторые из ключевых методов на этих интерфейсах, которые вам нужно будет выполнить, будут;* EditingControlFormattingValue, который должен будет возвращать то, что представляет вашу ценность.* EditingControlWantsInputKey, который будет контролировать, какие специальные нажатия клавиш вы хотите разрешить или запретить
После того, как у вас есть этот CustomDataGridViewEditingControl , инкапсулирующий ваш пользовательский элемент управления, вам нужно создать другой класс, который наследуется отDataGridViewTextBoxCell.Назовите его CustomDataGridViewCell .
Это класс, представляющий ячейку с вашим пользовательским элементом управления в ней.Установите переменную уровня модуля как экземпляр вашего CustomDataGridViewEditingControl
private MyCustomGridViewEditingControl _editControl;
Затем , переопределение:
InitializeEditingControl - установить любые значения по умолчанию, которые требует пользовательский контроль.Обычно вам нужно вызывать base.initialiseEditingControl, сначала передавая параметры, полученные переопределенным методом.
ValueType - возвращает тип данных, представляемый вашим пользовательским элементом управления, например, возвращает typeof (DateTime)
EditType - возвращает тип вашего элемента управления для редактирования, например, возвращает typeof (MyCustomControl)
DefaultNewRowValue , если вам нужно предоставить значение по умолчанию для вашегоуправление редактированием каждый раз, когда DataGridView запрашивает (вставляет) новую строку редактирования
Далее , вам понадобится, чтобы вы использовали этот переопределенный класс DataGridViewCell ( CustomDataGridViewCell ) в качестве свойства CellTemplateстолбца, который вы используете.Я реализовал пользовательские DataGridViewColumns для управления этим в прошлом, но, возможно, это уровень дальше, чем вы хотите / нужно идти.(если вы хотите использовать свой пользовательский элемент управления во многих сетках, вы можете сделать это.)
Для этого создайте класс, который наследуется от DataGridViewTextBoxColumn, и просто установите его свойство CellTemplate для экземпляра.вашего CustomDataGridViewCell
Это сбивает с толку, потому что многие термины и классы имеют схожие имена - надеюсь, это поможет.
В итоге: 1) Создайте CustomDataGridViewEditingControl - наследуется от вашего пользовательского элемента управления, но реализует IDataGridViewEditingControl
2) Создайте CustomDataGridViewCell - это использует ваш CustomDataGridViewEditingControl (шаг 1) в качестве элемента управления редактирования.
3) Используйте ваш CustomDataGridViewCell (шаг 2) в качестве CellTemplate объекта DataGridViewColumn
Надеюсь, это достаточно ясно ...