|
Группировка в DataGrid
|
|||
---|---|---|---|
#18+
Есть класс, который описывает файл, т.е он содержит набор свойств + свойство Path - путь к файлу без имени файла. Есть коллекция этих классов. Как сделать группировку по полю Path, с разбиением пути на каталоги? Например, есть путь "Folder1\Folder2\Folder3". Хочу в итоге иметь вид: +Folder1 +Folder2 +Folder3 Файл ... какие-то столбцы Где "+" - это Expander. По сути - получается дерево, смесь DataGrid и TreeView. Но хочу понять реально как-нибудь сделать многоуровневою группировку по одному полю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 00:12 |
|
Группировка в DataGrid
|
|||
---|---|---|---|
#18+
Супер_Пав, если число уровней группировки фиксированное - всё просто, это обычный DataGrid, и тут ничего не надо изобретать: https://msdn.microsoft.com/en-us/library/ff407126(v=vs.100).aspx если число уровней заранее неизвестно, то здесь есть 2 варианта: 1) вместо DataGrid использовать ListView: http://www.codeproject.com/Articles/30721/WPF-TreeListView-Control или https://blogs.msdn.microsoft.com/atc_avalon_team/2006/03/01/treelistview-show-hierarchy-data-with-details-in-columns/ . Здесь есть несколько нюансов в реализации - анпример, будет сюрприз, если приспичит сделать колонку со star size. 2) Собственно DataGrid: https://blogs.msdn.microsoft.com/mrochon/2009/10/16/displaying-hierarchical-data-in-the-datagrid/ , куски обсуждения здесь: http://stackoverflow.com/questions/3457107/wpf-handle-editable-hierarchical-data-treeviewdatagrid-hybrid . Основная идея - отступ контента первой колонки в зависмости от уровня иерархии, плюс динамическое скрытие/показ строк - либо переформированием ItemsSource, либо, как сделал я в свое время, стиль для DataGridRow, в котором видимость самого DataGridRow задается в зависимости от свойства IsVisible элемента ItemsSource, а для элемента это свойство выствавляется в рекурсивной процедуре при сворачивании/разворачивании уровней. Получилось примерно вот такое: ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 06:43 |
|
Группировка в DataGrid
|
|||
---|---|---|---|
#18+
я делаю так: делаю обёртку для коллекции, которая подписывается на INotifyCollectionChanged оригинальной коллекции и сама реали3ует этот интерфейс (если это во3можно), 3атем каждый элемент так же оборачивается в свою обёртку, которая содержит свойства IsExрanded, а 3а одно и IsSelected и все события для обработки иx и3менений. когда меняется IsExрanded я с помощью INotifyCollectionChanged добавляю или удаляю элементы, а в случаи Reset просто перечисляю коллекцию по новой. ICollectionView исполь3ую стандартный (ListCollectionView). Далее во вью, если строка группировки не содержит ячеек, то в DataGridRow CellРresenter 3аменяется на ContentРresenter с 3аданным шаблонов Могу скинуть "примерный" пример, когда буду на работе. Всё равно уже уволился, так, что не сильно 3анят ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 09:54 |
|
Группировка в DataGrid
|
|||
---|---|---|---|
#18+
Спасибо большое за ответы. Я видел эти примеры ранее, да и как я писал в 1м посте, смешать дерево и датагрид не проблема, но я хотел бы понять, реально ли делать группировку по 1 полю, но учесть, что оно составное поле. Может какой-то конвертер. Могу переписать классы, сделать древовидную структуру, но пока не пойму как сделать вложенную группировку. Сейчас у меня обычная коллекция элементов, группировку делаю через GroupDescriptions.Add(ИмяПоля); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 21:40 |
|
|
start [/forum/topic.php?fid=21&msg=39327398&tid=1440606]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 240ms |
total: | 521ms |
0 / 0 |