Как использовать пользовательский элемент управления для редактирования содержимого ячейки в DataGridView - PullRequest
3 голосов
/ 30 ноября 2011

Я пытаюсь отобразить пользовательский элемент управления в ячейке таблицы данных, чтобы я мог отображать информацию в хорошем формате.

Мне вполне удобно использовать элемент управления datagridview, принимающий список объектов в качестве источника данных.Мне также удобно заполнять содержимое ячейки в событии форматирования ячейки.

Поэтому я планирую вместо использования обычного текстового элемента управления, кнопочного элемента управления и элемента управления связанного текста в ячейке представления данных отображать свой собственный пользовательский элемент управления, которыйхороший для отображения некоторых пользовательских данных, таких как, имя, адрес, телефон, фото и другие.Это было бы хорошим улучшением в моем приложении.

Буду признателен за некоторые предложения по другим методам для достижения этой цели.

Ответы [ 2 ]

5 голосов
/ 06 декабря 2011

Вам необходимо наследовать от DataGridControl и переопределить некоторые методы и свойства, которые он создает. В сети есть несколько хороших статей, которые вы можете использовать для справки, включая:

Как: разместить элементы управления в Windows Forms DataGridView Cells

Пользовательские классы DataGridViewColumn & IDataGridViewEditingControl

3 голосов
/ 10 декабря 2011

Для этого есть несколько шагов, позволяющих аккуратно встроить пользовательский элемент управления в 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

Надеюсь, это достаточно ясно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...