Member 12561559 Ответов: 1

Datagridview cellformatting не срабатывает, если ячейка находится за пределами экрана справа


Хотя событие cellformatting прекрасно оптимизировано для работы только с видимыми строками на экране-похоже, это также относится и к ячейкам, которые находятся вне экрана.

Имея 12-16 столбцов с несколькими из них вне экрана справа от видимой ячейки/столбцов, я устанавливаю свойство backgroundcolor стиля строки через столбец/ячейку - форматирование ячеек не срабатывает... Он срабатывает и изменяет строку данных, как только я прокручиваю ее вправо, как только ячейка становится видимой...


Чтобы объяснить это лучше:
У меня есть datagridview с информацией о счете-фактуре, которую я хочу выделить красным цветом, когда дата в строке находится в течение нескольких дней после того, как она будет выдана. Теперь - код прекрасно работает на моем широкоэкранном экране, как показывают все столбцы. Ряды становятся красными, как и положено, и т. д.
Однако на мониторе с более низким разрешением, даже когда форма развернута, моя триггерная ячейка исчезает вправо, и форматирование ячеек не улавливает ее и поэтому не окрашивает строку в красный цвет, как это должно быть.

Я пробовал иметь две скрытые ячейки слева, но похоже, что cellformatting игнорирует невидимые ячейки по очевидным причинам (он не собирается рисовать что-то невидимое). Единственная альтернатива, и тогда она становится уродливой, - это переместить ячейку с выдающейся датой в значительной степени в первые 2 или 3, может быть, 4 столбца вместо того, где она находится в данный момент.

Я попробовал несколько поисков в Google, но я подозреваю, что я могу использовать неправильный поисковый запрос "datagridview cellformatting не работает, когда ячейка находится справа", и это ничего, что я могу видеть полезным для меня.

Я предполагаю, что другое решение состоит в том ,чтобы использовать мой "номер счета-фактуры" и сделать запрос на лету, чтобы проверить, находится ли дата записи счета-фактуры в пределах установленных границ, но я надеялся не делать запросов, которые попадают в базу данных, пока пользователь прокручивает ее.

Это ошибка с .net ? Я использую vb.net VS2015 с 4.6 фреймворка.
или есть событие "cellformatting type" без поддержки paint, которое также срабатывает, чтобы я мог изучить содержимое любой ячейки, иначе выигрыш в производительности, который DGV получает от того, что не смотрит на все ячейки, означает гораздо больший удар (во всяком случае, для меня), если мне придется запрашивать базу данных для каждой записи на странице записей.

Что я уже пробовал:

Различные поиски в google не увенчались успехом.

Gerry Schmitz

В чем "проблема"?

"Форматирование" ячейки происходит, когда ячейка "окрашена"; нет смысла "рисовать", когда ячейка "вне экрана" (т. е. не видна). По крайней мере, это делается для производительности.

Member 12561559

Пересмотрели мой вопрос, я не сделал его достаточно ясным - спасибо, и я надеюсь, что вы сможете помочь ! :)

Alek Massey

Если форматирование видимых объектов зависит от того, виден ли другой, потенциально скрытый объект, вам необходимо удалить эту зависимость.

Member 12561559

Единственное, что я могу придумать, - это переместить дату оплаты счета в одну из первых 3 ячеек, чтобы он был подобран cellformatting и почти гарантировал, что он не выпадет из видимого ряда.

1 Ответов

Рейтинг:
0

Alek Massey

Если ваш DataGridView или столбцы, определяющие стиль ячейки, доступны только для чтения, вы должны изменить DefaultCellStyle строк в событии RowsAdded. Это событие происходит только один раз при добавлении новой строки. Условие, которое вы исследуете, должно быть оценено тогда, и DefaultCellStyle строки должен быть установлен там.

Если элемент редактируемый, либо клетки основано данное условие доступны для редактирования, тогда используйте событие CommitEdit изменить DefaultCellStyle