Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > WPF - Комплексная таблица


Автор: CYBERDREAM 15.11.2010, 18:48
Приветствую всех. Есть таблица (~16 колонок, 90 строк минимум). Некоторые ячейки являются смерженными, либо по вертикали, либо по горизонтали. 
Сейчас сделано через грид, в ячейки которого вставлены TextBox'ы, а для сливания ячеек RowSpan, ColumnSpan используется. Проблема в том, что это ресурсоемко, отжирает немало памяти. 
Можно ли сделать подобный эффект через DataGrid? 
Таблица создается динамически.

Автор: CYBERDREAM 16.11.2010, 09:02
Так и хочется написать HEEEEEEEEEEEEELP smile 

Автор: SergeyLoginov 16.11.2010, 11:34
Можно. Но с рядом естественных ограничений (невозможность перестановки столбцов, сортировки и т.п.) и с изменением исходного кода самого DataGrid. 
DataGrid от Microsoft, к сожалению, не позволяет объединять ячейки :(
Я в свое время реализовал такую фичу. У меня без изменения исходников не получилось. У Вас тоже вряд ли получится. smile Код, к сожалению, не могу предоставить, не мне принадлежит.
Ключевые моменты: изменение методов ArrangeOverride(...), MeasureOverride(...) и OnRender(...) в классах DataGridCell и DataGridCellsPresenter, а также метода ArrangeChild(...) в классе DataGridCellsPanel. Ну и плюс код для хранения информации об объединении.

Автор: CYBERDREAM 16.11.2010, 11:53
а что касается нагрузки, сильно жрет оперативку?

Добавлено через 2 минуты и 9 секунд
сортировка и изменение порядка столбцов не нужны

Автор: SergeyLoginov 16.11.2010, 13:46
Касательно нагрузки, лично у меня получилось довольно плачевно, т.к. пришлось отключить виртуализацию строк/столбцов при поддержке объединения ячеек. Соответственно как и в гриде визуальные элементы всех ячеек грузятся в память сразу. Дело год назад было, я уж подзабыл первопричину сего ограничения, но причина есть (вроде бы из-за того, что надо знать размеры скрытых ячеек при генерации видимых на случай, если вдруг есть перекрытие их друг другом). Нас это устроило только потому что с объединением нам требуются только небольшие таблицы. В принципе, если усилия приложить, думаю, можно реализовать с виртуализацией.  Задача нетривиальная, но по моей оценке скорее решаемая, чем нет.

Добавлено через 14 минут и 31 секунду
Это я сужу о своей реализации. Я так прикинул, пути решения моей проблемы вроде есть. У Вас может и реализация будет такой, что виртуализация будет работать естественным образом. В общем, если очень надо, сделать можно. smile

Автор: CYBERDREAM 16.11.2010, 14:55
Ну если очень надо, то можно много чего) вопрос насколько)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)