Передача столбцов в грид
От: Сын Обсидиана  
Дата: 24.10.13 11:20
Оценка:
Задача состоит в следующем.
Есть пользовательский контрол, основным элементом которого является грид (DataGridView). При использовании сего контрола необходимо в дизайн-тайм передавать ему набор столбцов для грида. Программно все передается

DataGridViewColumn col1 = new DataGridViewCheckBoxColumn();
DataGridViewColumn col2 = new DataGridViewTextBoxColumn();
col1.Name = "checkboxColumn";
col2.Name = "simpleText";
col2.Width = 400;

myControl1.Grid.Columns.Add(col1);
myControl1.Grid.Columns.Add(col2);


Но задача стоит в том, чтобы передавать столбцы через PropertyGrid. Последний прекрасно понимает свойство типа DataGridViewColumnCollection и даже открывает его в красивом редакторе. Однако после завершения редактирования информация не сохраняется и никаких строк в исходники не добавляется (строго говоря столбцы создаются как поля на форме, но вот в контрол ничего не добавляется). Естественно, что при повторном открытии свойства в редакторе, последний оказывается пустым.

Я пробовал возвращать в PropertyGrid как сам DataGridView, так и его/отдельный DataGridViewColumnCollection, результат один и тот же. Последующие эксперименты показали, что в контрол не сохраняется вообще никакие массивы, даже пресловутый List<String>. Т.е. обычные свойства через PripertyGrid создать можно (при наличии соответствующего редактора), а вот коллекции — нет.

Кто-нибудь может помочь с этим вопросом? Что нужно сделать, чтобы PropertyGrid принимал и сохранял Коллекции?
Re: Передача столбцов в грид
От: Hex66 Россия  
Дата: 07.11.13 07:46
Оценка:
Здравствуйте, Сын Обсидиана, Вы писали:

СО>Задача состоит в следующем.

СО>Есть пользовательский контрол, основным элементом которого является грид (DataGridView). При использовании сего контрола необходимо в дизайн-тайм передавать ему набор столбцов для грида.

Проблема в том, что снаружи можно задать значения свойствам UserControl-а, которые не все "наследуются" внутренними контролами посредством TemplateBinding.

Если требуемуе свойство имеется у UserControl-а (в противном случае его следует добавить как DependencyProperty),
то внутри контрола следует обеспечить байндинг к этому свойству для DataGridView через TemplateBinding.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.