Цвет данных на VB.net в зависимости от того, сколько дней прошло с сегодняшнего дня. - PullRequest
0 голосов
/ 03 июня 2019

Так что в основном я хочу получить платежную систему за аренду имущества.

Я создал базу данных (в доступе для простоты работы), и сейчас я ищу способ сравнить дату в сетке данных с сегодняшней датой. Если дата последнего платежа отстает на 30 дней, он должен стать красным. Если его <30, он должен оставаться зеленым. </p>

Теперь мне интересно, как это сделать, потому что я не могу заставить его работать.

Поскольку я довольно плохо знаком с языком vb.net, у меня ничего не получалось. Я подумал, что публиковать любой код будет бесполезно, так как он подчеркнут красным, и моя программа даже не запустится.

Я подумал, что это будет что-то в стиле

If me.dgv.columns("1") > 30: me.dgv.row.defaultcellstyle.color = "red" End if

Даты сортируются / отображаются в порядке возрастания, не уверены, может ли это помочь?

Любая помощь будет очень полезна, и я заранее благодарю вас!

Ответы [ 2 ]

2 голосов
/ 03 июня 2019
  • для проверки через 30 дней вы используете date.Now.addDays(30)
  • проверить за 30 дней до использования date.Now.addDays(-30)
  • для окраски переднего цвета ячейки вы используете что-то вроде этого:

    For Each dr As DataGridViewRow In DataGridView1.Rows If CDate(dr.Cells(0).Value) > Date.Now.AddDays(30) Then dr.Cells(0).Style.ForeColor = Color.Red End If Next

Вы также можете зациклить ячейки, чтобы проверить все ячейки DGV на даты и сравнить их

0 голосов
/ 03 июня 2019

Из моего опыта лучше всего обрабатывать это в событии RowPrePaint.

Пример:

        Public Class Test
            Private Shared Rnd As New Random

            Private Sub FormControls_Load(sender As Object, e As EventArgs) Handles MyBase.Load
                'Start Sample
                DataGridView1.Columns.Add(New DataGridViewTextBoxColumn With {
                                          .Name = "MyDate",
                                          .ValueType = GetType(DateTime)})
                For i As Integer = 0 To 1000
                    'create random dates in the past
                    DataGridView1.Rows.Add(Now.AddDays(-Rnd.Next(0, 25)))
                Next
                'End Sample
            End Sub

            Private Sub DataGridView1_RowPrePaint(sender As Object, e As DataGridViewRowPrePaintEventArgs) Handles DataGridView1.RowPrePaint
                Dim DgvRow As DataGridViewRow = DataGridView1.Rows(e.RowIndex)

                With DgvRow
                    If DgvRow IsNot Nothing AndAlso DgvRow.Cells(0).Value IsNot Nothing AndAlso DgvRow.Cells(0).Value IsNot DBNull.Value Then
                        If Now.Subtract(CDate(DgvRow.Cells(0).Value)).TotalDays > 20 Then
                            DgvRow.DefaultCellStyle.BackColor = Color.Yellow
                        Else
                            DgvRow.DefaultCellStyle.BackColor = Color.Empty
                        End If
                    End If
                End With

            End Sub


        End Class
...