|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
||||||
Задать стиль для области DataGridView08.10.2013, 09:59. Показов 4535. Ответов 20
Метки нет (Все метки)
Доброе время суток!
Вопрос по DataGridView (dgvDoc) Размер dgvDoc 19 колонок и 1622 строк (30818 ячеек) Заполнение данными из БД происходит приемлимое время (менее 2 сек.) Когда устанавливаю FontStyle (шрифт, размер, стиль, выравнивание) время увеличивается до 40 сек. Шрифт, размер, стиль, выравнивание - эти параметры записаны в БД. Понятно, что сие происходит из-за перебора ячеек и установки стиля для каждой. При этом есть 2 области (17685 ячеек и 12918 ячеек) внутри которых стили одинаковые. Отсюда вопрос Как задать стиль для области dgvDoc (не перебором ячеек) Пробовал dgvDoc.SelectedCells, но там нельзя установить стиль. foreach (DataGridViewCell dvc in dgvDoc.SelectedCells) - тот же перебор Вот кусок кода
0
|
||||||
| 08.10.2013, 09:59 | |
|
Ответы с готовыми решениями:
20
Как задать новый стиль для тега, у которого уже есть стиль Задать стиль для @Html.ValidationMessageFor Задать стиль для определенной таблицы |
|
|
|
| 08.10.2013, 10:06 | |
|
NickAssa, снижение производительности связано с дики количеством операций сравнения, а не с изменением стиля. Я только не понял, ты что для каждой ячейки хранишь с каким стилем она должна отображаться?
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|||||||||||
| 08.10.2013, 11:16 [ТС] | |||||||||||
|
База досталась по наследству и там действительно стиль хранится для каждой ячейки.
Попробую снизить количество сравнений - отпишу результат. Добавлено через 57 минут Получилось вот что Если оставить только заполнение данными, то отрисовка происходит за 1.6 сек.
А вот как только добавляю установку стилей время увеличивается до 52 сек.
Поэтому вопрос остается Как задать стиль для области dgvDoc (не перебором ячеек)
0
|
|||||||||||
|
|
||
| 08.10.2013, 11:19 | ||
|
а есть какой-то признак, по которому ячейки объединяются в группы?
Добавлено через 2 минуты
0
|
||
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 08.10.2013, 11:27 [ТС] | |
|
Явного признака нет. Просто в таблице есть поле с кодом колонки и кодом строки. И те 2 области, про которые я писал (17685 ячеек и 12918 ячеек) состоят из ячеек, которые образуют сплошной прямоугольник.
Про дефолтный стиль думал, но это позволит сократить время примерно в 2 раза (области почти одинаковые).
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 08.10.2013, 12:23 [ТС] | |
|
0
|
|
|
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
|
|
| 08.10.2013, 12:25 | |
|
В каком событие происходит форматирование?
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 08.10.2013, 12:33 [ТС] | |
|
Заполнение и форматирование выделено в отдельный метод, который запускается по событию Load формы
0
|
|
|
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
|
|
| 08.10.2013, 12:36 | |
|
Перенесите форматирование в CellFormatting событие.
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 08.10.2013, 12:49 [ТС] | |
|
Не понял идею
Событие CellFormatting происходит, когда нужно изменить представление ячейки. Т.е. мне придется вызывать это событие из того же цикла и изменять стиль ячейки [e.ColumnIndex][e.RowIndex]
0
|
|
|
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
|
|
| 08.10.2013, 13:02 | |
|
Т.е. событие будет происходить когда ячейка будет выводиться, и вы для нее будете задавать стиль. Если я не ошибаюсь событие будет возникать только для тех ячеек, которые нужно прорисовать в текущий момент, а не все 1600.
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 08.10.2013, 13:26 [ТС] | |
|
Т.е. если сразу на экране выводится только 100 строк, то изменить стиль нужно только для них.
После движения, например скролла вниз, отрисуется еще десяток строк и форматировать нужно их. Я правильно понял? Тогда, наверное, логично сразу записать все параметры стиля всех ячеек в tag каждой ячейки.
0
|
|
|
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
|
||||||||
| 08.10.2013, 14:40 | ||||||||
на сколько я понял, то у вас что-то в этом виде: 1 | 5 | lol | style | color | merged| тобиш в строке хранятся данные стиля. Если это так, то у вас уже все есть.
и еще совет, для того чтобы уменьшть "дрожание/мерцание" при скролинге используйте это вместо DataGridView:
1
|
||||||||
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
||||||||
| 08.10.2013, 14:55 [ТС] | ||||||||
|
cell_column ,cell_row ,merged_columns ,merged_rows ,column_width ,row_height ,cell_value ,format_mask ,font_name ,font_size ,is_bold ,is_italic ,is_underline ,foreground_color ,background_color ,horizontal_alignment ,vertical_alignment ,top_border ,bottom_border ,left_border ,right_border Т.е. хранятся "куски" стиля для каждой ячейки.
Боюсь, что это сильно замедлит работу.
0
|
||||||||
|
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
|
||
| 08.10.2013, 15:01 | ||
итак давайте дальше догадываться: В таблице вы храните стиль, а потом просто формируете "полотно", а данные, что с ними? Если вам не сложно, покажите что у вас получается на экране скриншотом, если конечно это возможно.
0
|
||
|
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
|
||
| 08.10.2013, 15:01 | ||
|
1
|
||
|
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
|
|
| 08.10.2013, 15:07 | |
|
исходя из всего этого, я поступил бы следующим образом:
Данные ячеек вынес бы в отдельную DataTable а стиль бы хранил в исходной. К гриду привязал бы таблицу с данными, а в событии CellFormatting получал бы стиль и применял бы его к данной ячейке. ЗЫ. для ускорения работы с таблицей стилей я бы хранил ее как Dictionary<Key, Value>
0
|
|
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|||||||
| 08.10.2013, 15:25 [ТС] | |||||||
|
Во вложении скрин DataGrid'а
0
|
|||||||
|
2 / 2 / 0
Регистрация: 24.08.2012
Сообщений: 23
|
|
| 10.10.2013, 12:51 [ТС] | |
|
Пошел другим путем - организовал второй поток
В основном загружаю 50 строк (~1 сек.) А в делегате заполняю все остальное.
0
|
|
| 10.10.2013, 12:51 | |
|
Помогаю со студенческими работами здесь
20
Задать отдельный стиль для Mozilla Задать стиль текста для всего проекта C#
Не могу задать стиль для мобильного вида страницы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|