Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Быстрый грид для специфичной операции (выделение и окрашивание ячеек)

88K
04 марта 2013 года
Анатолий Вяземский
5 / / 04.03.2013
Доброго времени суток.

Прошу совета/помощи в следующей задаче.

Дано: Есть программа, написанная на delphi. В основной рабочей области создается большая таблица (200х200). Пользователь выделяет область и окрашивает клеточки в красный цвет. В тонкости программы (зачем это надо) вдаваться сейчас не имеет смысла.
Вот пример рабочей области: http://i.stack.imgur.com/5BslB.png

Задача: переписать программу на .NET (c#)

Проблема: скорость выделения ячеек - очень большие тормоза. В программе на delphi ячейки выделяются мгновенно.

Можно ли как-то оптимизировать таблицу? Другие операции, кроме выделения и закрашивания с ней производиться не будут. Есть ли быстрые сторонние компоненты?

Буду благодарен за любой совет. Спасибо. Готов отблагодарить материально за помощь в решении вопроса.
297
05 марта 2013 года
koodeer
1.2K / / 02.05.2009
Какая технология используется - WinForms или WPF?
Какой компонент используется?
Где пример кода, который тормозит? (Нечему там тормозить).
Если нужно только выделение и закрашивание, может и не нужен грид? Рисовать вручную - будет легко и быстро.
414
05 марта 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: koodeer
Какая технология используется - WinForms или WPF?


Просто интересно: для разных технологий разная реализация контролов? Не с одной библиотеки всё тащится?

297
06 марта 2013 года
koodeer
1.2K / / 02.05.2009
Цитата: CassandraDied
Просто интересно: для разных технологий разная реализация контролов? Не с одной библиотеки всё тащится?


Это совершенно разные технологии, не имеющие почти ничего общего.

88K
07 марта 2013 года
Анатолий Вяземский
5 / / 04.03.2013
Цитата: koodeer
Какая технология используется - WinForms или WPF?
Какой компонент используется?
Где пример кода, который тормозит? (Нечему там тормозить).
Если нужно только выделение и закрашивание, может и не нужен грид? Рисовать вручную - будет легко и быстро.



Спасибо за ответ. Пробовал и winforms, и wpf. Добавляю gridview (или datagrid в wpf) на форму и в цикле добавляю колонки-ряды. Ширина колонок минимальна - чтобы таблица вмещалась в рабочую область. Пытаюсь выделить 100 ячеек мышкой, выделение тормозит. Может у Вас есть пример кода, где бы этот процесс выполнялся быстро?

По поводу рисования - можно попробовать. Правда никогда не имел с этим дел. Ячейки таблицы связаны с матрицей - белая ячейка 0, красная ячейка 1. Ячейки изменяют цвет по double click'у, также ячейки можно выделять и вызывать на них контекстное меню, чтобы окрашивать их разом, копировать и инвертировать цвет. Такое можно/трудоемко реализовывать?

Спасибо.

414
08 марта 2013 года
CassandraDied
763 / / 24.05.2012
Самый тормозной момент в работе с таблицами в winforms — создание новой ячейки. Стоит всё-таки показать код выделения мышкой. Ну и профайлером посмотреть. Хотябы самому замерять, сколько какой участок кода выполняется через стандартный таймер.
88K
08 марта 2013 года
Анатолий Вяземский
5 / / 04.03.2013
Цитата: CassandraDied
Самый тормозной момент в работе с таблицами в winforms — создание новой ячейки. Стоит всё-таки показать код выделения мышкой. Ну и профайлером посмотреть. Хотябы самому замерять, сколько какой участок кода выполняется через стандартный таймер.



Код выделения мышкой? м?

Весь код программы:

 
Код:
dataGridView1.Dock = DockStyle.Fill;

dataGridView1.RowCount = 200;
dataGridView1.ColumnCount = 200;

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    column.Width = 9;
}
Я разворачиваю окошко на весь экран и выделяю произвольное количество клеток мышкой => тормоза.
414
08 марта 2013 года
CassandraDied
763 / / 24.05.2012
Да, мышкой. Судя по изображению в первом посте, этот код не может быть всей программой.
88K
08 марта 2013 года
Анатолий Вяземский
5 / / 04.03.2013
Цитата: CassandraDied
Да, мышкой. Судя по изображению в первом посте, этот код не может быть всей программой.



Спасибо за овтет. Остальной код не важен. Какой смысл реализовывать функционал, если выделение ячеек на таком коде визуально тормозит?

1
08 марта 2013 года
kot_
7.3K / / 20.01.2000


Спасибо за овтет. Остальной код не важен. Какой смысл реализовывать функционал, если выделение ячеек на таком коде визуально тормозит?


Странные люди. Вы или к гадалке обращайтесь с таким подходом - хочу то,не знаю что - или если уж соизволили обратиться на форум - четко отвечайте на вопросы, если хотите что бы вам помогли - а не талдычте "важен-не важен". Тут по картинкам не гадают.

Судя по всему у тебя при перерисовке происходит вызов какой то "тяжелой" функции, например вычисления значения или получения его из базы, или для каждой ячейки происходит перерисовка таблицы заново (что кстати наиболее вероятно). Для того что бы дать конкретные рекомендации - надо видеть код, который вызывается в моменты рисования, а не те три строчки, которые ты привел.

88K
08 марта 2013 года
Анатолий Вяземский
5 / / 04.03.2013
Цитата: kot_

Судя по всему у тебя при перерисовке происходит вызов какой то "тяжелой" функции, например вычисления значения или получения его из базы, или для каждой ячейки происходит перерисовка таблицы заново (что кстати наиболее вероятно). Для того что бы дать конкретные рекомендации - надо видеть код, который вызывается в моменты рисования, а не те три строчки, которые ты привел.



Нет никакой программы - это первый шаг к ее созданию. На скриншоте программа на delphi.
Это ВЕСЬ код. Голый грид. Без всего. И выделение мышкой тормозит. Я понимаю, что происходит перерисовка, потому и спрашиваю, что делать, если ГОЛЫЙ грид тормозит.
И да, я четко описал, чего хочу в первом сообщении.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог