| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Copy-Paste для DataGridView(Virtual Mode) |
| Автор: allknower 20.6.2008, 15:41 | ||||
На данном этапе реализовал копирование одной ячейки:
Теперь встала задача реализовать копирование любой выделенной области. То есть строк, столбцов, нескольких ячеяк нескольких строк: +------+------+------+------+------+ | | | | | | +------+------+------+------+------+ | | | S | S | | +------+------+------+------+------+ | | | S | S | | +------+------+------+------+------+ S - выделенные ячейки Я создал класс Range
Идея такова: оборачиваем коллекцию DataGridView.SelectedCell в этот класс и толкаем в буфер. При вставке - выталкиваем из буфера и втавляем в грид начиная с ячейки, над которой было вызвано меню. Все что не вошло усекаем. Проблема в том что DataGridView.SelectedCell - есть ничто иное как ArrayList в котором списком хранятся выделенные ячейки. Как мне получить количество колонок и столбцов?? Свойства DataGridView.SelectedRow.Count и DataGridView.SelectedColumn.Count при неполном выборе (как на картинке) хранят нули. Хотя реально выбрано две строки и два столбца. Хотелось бы увидеть какой то SelectedRange (на подобие Delphi'йского. У StringGrid'a кажется таковой был.) |
| Автор: allknower 23.6.2008, 13:38 | ||||
| Idsa, обнаружился такой вот негатиффчик: Пи выделении строк в ArrayList "DataGridView.SelectedCell" они попадают в совершенно немыслемом порядке. Выкладываю то что наваял, может кому пригодится. Конечно сыровато, но работает. Пинами не ногать!!! Класс Range
SimpleData здесь это просто пользовательский тип данных, не более того. На логику никак не влияет. Клик по пунктам Copy и Paste:
Этот код выдаст ошибку если попытаться скопировать и вставить строку, выбранную за заголовок (там где стрелочка)... Это нужно обробатывать отдельно. |
| Автор: stashe 24.6.2008, 13:17 | ||
А это не в тему? |
| Автор: allknower 24.6.2008, 15:46 | ||||||
Сколько я не колдовал с ячейками - вытащить их из буфера у меня так и не получилось. Может что не правильно делал? Какой format нужно указать в
C пользовательским форматом у меня не заработало. :( А самописный Range развязал руки, и теперь я копирую, дублирую (как в Excel) как хочу... |