Member 13745089 Ответов: 3

Как изменить цвет ячейки datagridview в зависимости от даты


Я хочу изменить цвет столбца datagridview "CoverExpire" на красный, когда данные ячейки < текущая дата или 15 дней назад.

ниже я упомянул о том, что я пробовал. это ничего не меняет в моем datagridview

Пожалуйста, помогите мне Слав

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

Private Sub dgInsuranceSummary_DashBoard_Cellformatting(отправитель как объект, e как система.Окна.Формы.DataGridViewCellFormattingEventArgs) обрабатывает dgInsuranceSummary_DashBoard.CellFormatting

For i As Integer = 0 To dgInsuranceSummary_DashBoard.Rows.Количество - 1
Если dgInsuranceSummary_DashBoard.Rows(i).Ячейки ("CoverExpire").Значение <= CDate(Now) Then
dgInsuranceSummary_DashBoard.Rows(i).Ячейки ("CoverExpire").Стиль.Цвет Текста = Цвет.Красный
dgInsuranceSummary_DashBoard.Rows(i).DefaultCellStyle.Цвет Фона = Цвет.Синий
Конец, Если
Следующий
Конец Подводной Лодки

3 Ответов

Рейтинг:
23

Maciej Los

Похоже, вы на правильном пути...

Проверить это: Практическое руководство.Событие CellFormatting (Системы.Окна.Формы) | Microsoft Docs[^]

Вам не нужно использовать for...next петля. Все, что вам нужно, - это использовать параметры, переданные событию. Примечание: Вы должны проверить, если значение в ячейке не является Nothing и он содержит в себе Date ценность. Видеть:

Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
    ByVal e As DataGridViewCellFormattingEventArgs) Handles dataGridView1.CellFormatting
    If Me.dataGridView1.Columns(e.ColumnIndex).Name _
        = "CoverExpire" Then
        If e.Value IsNot Nothing Then
            ' Check for the string "pink" in the cell.
            Dim myDate As Date = CType(e.Value, Date)
            Dim compDate As Date = DateTime.Today.AddDays(-15)
            If myDate < compDate Then
                e.CellStyle.BackColor = Color.Red
            Else
                e.CellStyle.BackColor = Color.Blue
            End If
        End If
    End If
End Sub


Примечание: приведенный выше код может содержать ошибки, потому что я его еще не тестировал.

Проверьте и другие события тоже: Класс DataGridView (System.Окна.Формы) | Microsoft Docs[^]


Рейтинг:
15

BASSIES

date1 находится в datagridview , date - это дата сегодня

Отрегулируйте немного , как цвет

Try
           For Each NRow In Me.TblgetalDataGridView.Rows
               Dim date1, date2
               date1 = CType(NRow.Cells(1).Value(), String)
               If NRow.Cells(1).Value IsNot DBNull.Value Then
                   If DateDiff(DateInterval.Day, date1, date2) + 1 >= 15 Then
                       NRow.DefaultCellStyle.ForeColor = Color.Red
                   Else
                       NRow.DefaultCellStyle.ForeColor = Color.Black
                   End If
               Else
               End If
           Next
       Catch ex As Exception

       End Try


Member 13745089

Привет Басси, этот метод прекрасно работает. Спасибо за вашу помощь

Рейтинг:
1

Member 11449311

<pre lang="vb">
Private Sub dgInsuranceSummary_DashBoard_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgInsuranceSummary_DashBoard.CellFormatting

For i As Integer = 0 To dgInsuranceSummary_DashBoard.Rows.Count - 1
''datediff(interval, date1, date2);
''interval can be day, month, year, hours, second minutes, etc. It subtracts date1 from ''date2.
''Enter date1 and date2 in Dateformat.
''Format: DateDiff(DateInterval.Day, Now.Date, Now.AddDays(4).Date)
''Output: 4
d =DateDiff(DateInterval.Day, Now.Date, Now.AddDays(-15).Date), cdate(now)) 
If dgInsuranceSummary_DashBoard.Rows(i).Cells("CoverExpire").Value <= CDate(Now) and d Then
dgInsuranceSummary_DashBoard.Rows(i).Cells("CoverExpire").Style.ForeColor = Color.Red
dgInsuranceSummary_DashBoard.Rows(i).DefaultCellStyle.BackColor = Color.Blue
End If
Next
End Sub


Member 13745089

Не могли бы вы объяснить мне этот код? это не совсем понятно

Member 13745089

пожалуйста, скажите мне, откуда взялась эта буква "Д"?