Рассмотрите возможность использования этого открытого источника ObjectListView .
Это зрелый элемент управления, который может отображать все виды списков, древовидный список и многое другое (не мой код - я просто счастливый пользователь).
Потребуется несколько минут, чтобы привыкнуть к идее его использования, но как только вы его получите - использовать его будет очень просто.
Примеры: