Рейтинг:
0
Sree1981
Спасибо за ваш ответ.Но мне это не удалось.Во-первых, это не соответствует моей концепции.Мне нужно проверить значения одного столбца на основе значения в другом столбце.Поэтому я заменил его своим кодом, но когда я вызываю его с помощью dgvData_CellPainting (), он показывает ошибку.
OriginalGriff
И не видя вашего кода или не зная, в чем ошибка, что вы ожидаете от нас сделать?
Sree1981
Я поместил следующий код в форму, которая имеет datagridview1
Sub Gridviewcolor(datagridview1 как DataGridView)
For i As Integer = 0 To datagridview1.Rows.Количество - 1
If (datagridview1.Rows(i).Ячейки("Дата Завершения").Значение <= дата.Сегодня) И (datagridview1.Rows(i).Ячейки("Статус").Значение = "Продолжается") Затем
datagridview1.Ряды(я).Ячейки("Дата Завершения").Стиль.Цвет Фона = Цвет.Красный
ElseIf (DateDiff(DateInterval.День, Дата.Сегодня datagridview1.Rows(i).Ячейки("Дата Завершения").Значение) <= 20) и (datagridview1.Rows(i).Ячейки("Статус").Значение = "Продолжается") Затем
datagridview1.Ряды(я).Ячейки("Дата Завершения").Стиль.Цвет Фона = Цвет.Аква
Конец, Если
Следующий
Конец Подводной Лодки
и я назвал это с помощью Gridviewcolor(DataGridView1)
он работает, но кто-то сказал, что это неправильно.
Sree1981
Я поместил свой код в событие cellpainting datagridview1 следующим образом.Это работает, но правильно ли это?
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) обрабатывает DataGridView1.CellPainting
For i As Integer = 0 To DataGridView1.Rows.Количество - 1
If (DataGridView1.Rows(i).Ячейки("Дата Завершения").Значение <= дата.Сегодня) И ((DataGridView1.Rows(i).Ячейки("Статус").Value = "continuing") или (DataGridView1.Rows(i).Ячейки("Статус").Значение = "Hold")) Затем
DataGridView1.Rows(i).Ячейки("Дата Завершения").Стиль.Цвет Фона = Цвет.Красный
ElseIf (DateDiff(DateInterval.День, Дата.Сегодня DataGridView1.Rows(i).Ячейки("Дата Завершения").Значение) <= 20) и ((DataGridView1.Rows(i).Ячейки("Статус").Value = "continuing") или (DataGridView1.Rows(i).Ячейки("Статус").Значение = "Hold")) Затем
DataGridView1.Rows(i).Ячейки("Дата Завершения").Стиль.Цвет Фона = Цвет.Аква
Конец, Если
Следующий
Конец Подводной Лодки
OriginalGriff
Нет. Даже близко нет.
Как вы думаете, для чего существует событие CellPainting? Как вы думаете, когда это называется? Подсказка: подумайте о названии события ...
Sree1981
На самом деле я не знаю, что я новичок.
OriginalGriff
Ну, вы проверили документацию?
Когда, по-вашему, его можно было бы назвать таким именем?
Sree1981
Да, это так. Я заменил dgvData_CellPainting (в статье, на которую вы ссылались) на DataGridView1_CellPainting, думая, что dgvData-это имя Datagridview.
OriginalGriff
Нет, как вы думаете, когда система вызывает метод обработчика для события под названием CellPainting?
Это:
1) Когда форма впервые построена?
2) Когда будет построен DGV?
3) когда мышь проходит над ним?
4) Когда пользователь нажимает на определенную ячейку?
5) другие?
Как вы думаете, и почему?
Sree1981
Изначально, я думал, что это была процедура. Я попробовал таким образом, но не было никакого кода для вызова процедуры.
Затем в соответствии с инструкцией "просто подключите обработчик событий CellPainting к вашему DataGridView" я помещаю свой код в событие Cellpainting.
OriginalGriff
На нем написано "долгий день"...
События: вы ведь знаете, что это такое, да?
Когда вы нажимаете кнопку, система вызывает событие Click, которое проверяет конкретную коллекцию обработчиков кнопок и по очереди вызывает каждый метод обработчика в цепочке.
Чтобы "подключить обработчик", проще всего дважды щелкнуть событие на панели событий панели объектов в Visual studio (найдите световой болт чуть выше списка свойств).
Ваш метод будет вызван, когда произойдет событие.
В этом случае вам нужно найти событие CellPainting в списке и добавить код в обработчик.
Но только не этот код. Этот код представляет собой цикл, и это не обязательно в событии CellPainting, потому что ... ну, вы мне скажите: для чего вызывается обработчик событий CellPainting? Что заставляет систему вызывать событие?
Sree1981
Я прочитал следующее...
Событие CellPainting вызывается всякий раз, когда ячейка нуждается в перекраске. Это может быть вызвано необходимостью перерисовки ячейки, поскольку она была признана недействительной, закрыта другим окном, изменением источника данных, изменением значения ячейки, появлением ячейки в поле зрения после прокрутки и т. д
OriginalGriff
Да, именно так.
Так почему же вы хотите поместить туда петлю, чтобы посмотреть на другие строки?
Sree1981
Надеюсь, на этот раз я на правильном пути.Но невозможно ограничить окраску только тогда, когда значение столбца "статус" равно "продолжается"или "удерживается".
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) обрабатывает DataGridView1.CellPainting
Дим dgv как практическое руководство = TryCast(отправитель, практическое руководство)
Если dgv не является ничем и также e.RowIndex >= 0, то
Если e.ColumnIndex = dgv.Columns("дата завершения").Тогда Индекс
Тусклый c как цвет
Если e.Value-это не Ничто, то
Дим значение как дата = функция cdate(электронная.Значение)
Если значение < сегодня, то
с = Цвет.Красный
Ключевые Слова Elseif Функция Datediff(Для Dateinterval.День, Дата.Сегодня, значение) <= 25 тогда
с = Цвет.Аква
Еще
с = dgv.DefaultCellStyle.Задний цвет
Конец, Если
е.CellStyle.BackColor = c
Конец, Если
Конец, Если
Конец, Если
Конец Подводной Лодки
Sree1981
У меня работает следующий код.Правильно ли это?
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) обрабатывает DataGridView1.CellPainting
Дим dgv как практическое руководство = TryCast(отправитель, практическое руководство)
Если dgv не является ничем и также e.RowIndex >= 0, то
Если e.ColumnIndex = dgv.Columns("дата завершения").Тогда Индекс
Тусклый c как цвет
Если e.Value-это не Ничто, то
Дим значение как дата = функция cdate(электронная.Значение)
Если значение &ЛТ; сегодня атакже dgv.Строк(электронная.Параметр rowindex).Ячейки("Статус").Ценность.ToString = "текущий" или dgv.Rows(e.Параметр rowindex).Ячейки("Статус").Ценность.ToString = "Hold", То
с = Цвет.Красный
Ключевые Слова Elseif Функция Datediff(Для Dateinterval.День, Дата.Today, value) <= 25 AndAlso dgv.Rows(e.Параметр rowindex).Ячейки("Статус").Ценность.ToString = "текущий" или dgv.Rows(e.Параметр rowindex).Ячейки("Статус").Ценность.ToString = "Hold", То
с = Цвет.Аква
Еще
с = dgv.DefaultCellStyle.Задний цвет
Конец, Если
е.CellStyle.BackColor = c
Конец, Если
Конец, Если
Конец, Если
OriginalGriff
Выглядит намного лучше!
Sree1981
Я знаю, что я не эксперт и не могу предложить идеальное решение.Пожалуйста, посоветуйте сделать его идеальным.Я знаю, что вы уже потратили на это свое драгоценное время..Спасибо...
OriginalGriff
Оставь его в покое!
В компьютерах есть Максима: "если это не сбой, не исправляйте его."
Вместо этого вернитесь и посмотрите на него через шесть месяцев и посмотрите, что еще опыт говорит вам о том, что вы произвели.