Вы хотите использовать UserControl
в качестве столбца в DataGridView
. Для отображения оценок/строк/столбцов вашего UserControl
('yuc'
) существует несколько вариантов. Вот три, которые приходят на ум:
Отбросьте DGV и пойти на FlowLayoutPanel
. Это просто реализовать и будет работать в значительной степени из коробки. Единственный аргумент в том, что производительность будет вялой, если в ней будет слишком много элементов управления. Предположим, что ваш UC (yuc
) имеет 10 элементов управления; несколько тысяч элементов управления являются лимитом в WinForms, поэтому несколько (100-300) yucs
будут работать нормально, но помимо этого вам нужно переосмыслить дизайн.
Пройдите весь путь и создайте специальную ячейку DataGridView
, в которой будет размещаться адрес yuc
. Вот complete and nice walk-through. Как вы можете видеть, это будет довольно много дополнительной работы; классы для добавления, интерфейсы для реализации и т. д. И, что еще хуже: все это действительно означает, что новый тип ячейки действует как обычная ячейка DGV, прочитает ее и позволит вам редактировать только один значение , Это намного меньше, чем то, что может сделать ваш yuc
.
Вариант 3: Чит! Вы можете объединить avantages из yuc
данных и DGV
работы дисплея, если вы показываете только одинyuc
в тока клетки путем накладывания его и сделать все другие клетки, показать то, что их yucs
будет выглядеть.
Этот третий вариант позволит вам добавить довольно много столько строк, сколько ваша память позволяет, хотя стоит отметить, что общая ширина столбцов не может превышать 64k.
Я могу придумать два способа создания правильного дисплея: ячейки могут отображать Bitmap
, которые они держат вместе со своими другими данными в структуре Tag
, или они могут рисовать их в событии CellPaint
. Первый занимает больше памяти, но должен работать быстрее.
Вам нужно создать класс данныхyucData
для yuc
, который содержит все данные, необходимые для initalze в yuc
. Он также может содержать Bitmap
, который можно создать с помощью метода DrawToBitmap
.
Теперь каждый раз, когда текущая ячейка перемещается, вы показываете/перемещаете редактирование yuc
и инициализируете его данными в ячейке Tag
. Когда значения изменены, вы обновите Bitmap
.
И в случае CellPainting
вы рисуете Bitmap
в каждую ячейку.
See here для примера наложения UserControl
на DataGridView
. Там он накладывается на целый ряд, который растет на аккордеоне, как будто он имеет все размеры. Другие строки и ячейки довольно регулярны.
То, что я написал, это строки, но вы можете просто разместить их в столбцах, которые вы создавать динамически.
Но все это действительно только стоит, если вы попали в предел контроля в Winforms
с FLP
.
Ну, если WPF
вариант, там все это не будет проблемой ..
Рассмотрим размещая некоторые из этих UserControls в FlowLayoutPanel. Если пользователю нужно заполнить больше, нажмите кнопку, которая добавит больше UserControls. – endofzero
Hey :) Посмотрите здесь: http://stackoverflow.com/questions/18055737/add-a-panel-to-datagridview –
Вы можете создать пользовательский столбец, в котором во время редактирования размещается составной элемент управления в ячейке. Но вместо создания такого столбца сетки вы можете использовать столбец кнопок и редактировать значения в окне, которое вы открываете над сеткой. Также вы можете использовать контейнер 'TableLayoutPanel', чтобы иметь сетевой интерфейс, подобный сетке. –