VB.NET: заполнение Gridview датами (интервал 30 дней) - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь заполнить сетку с датами.

Например, сегодняшняя дата - 18.02.2009, а следующая в течение 30 дней - 3/03/2019.поэтому желаемый результат будет выглядеть следующим образом

No.     Date
1       3/20/2019
2       4/19/2019
3       5/19/2019

и т. д.

, но результат будет

No.     Date
1       3/20/2019
2       3/20/2019
3       3/20/2019

и т. д.

Вотмой код пока.

Dim termCounter As Integer = 36
Dim today As DateTime = DateTime.Today
Dim dueDate As DateTime = today.AddDays(30)

Dim dtable As DataTable = New DataTable()
dtable.Columns.Add("No.")
dtable.Columns.Add("Payment Date")
Dim RowValues As Object() = {"", ""}
Dim dRow As DataRow

Dim tmpDate As Date
For i As Integer = 1 To termCounter
                    If GridAmortSched.RowCount <= 0 Then
                        RowValues(0) = i
                        RowValues(1) = dueDate.ToShortDateString
                        dRow = dtable.Rows.Add(RowValues)
                    Else
                        tmpDate = GridAmortSched.Rows(GridAmortSched.RowCount - 1).Cells(1).Value.ToString()
                        RowValues(0) = i
                        RowValues(1) = tmpDate.AddDays(30).ToShortDateString
                        dRow = dtable.Rows.Add(RowValues)
                    End If
                Next
                dtable.AcceptChanges()
                GridAmortSched.DataSource = dtable

1 Ответ

0 голосов
/ 18 февраля 2019

Как это часто бывает, код ведет себя так, как вы сказали, а не как вы этого хотите: -).

Каждый раз, когда вы проходите цикл, вы устанавливаете tmpDate из того же источника, а затем через две строки вы помещаете значение в RowValues.:

tmpDate = GridAmortSched.Rows(GridAmortSched.RowCount - 1).Cells(1).Value.ToString()

Вы не настраиваете источник на i и не увеличиваете его.Когда вы AddDays, вы также не регулируете исходное значение (которое не будет работать из-за того, как и когда вы его назначаете).

Два простых исправления (два варианта)

Один. Первый - индексировать дни, которые нужно добавить, к значению цикла - простая модификация приведенного ниже кода достигнет этого.Это быстрое решение, и в будущем его будет сложнее поддерживать - более конкретно, его будет сложнее определить, если вы измените что-либо, например, начальную точку цикла.

RowValues(1) = tmpDate.AddDays(30*i).ToShortDateString

Two. Другой вариант - обратиться к логике кода.Установите базовое значение и затем увеличьте его в цикле.

Dim tmpDate As Date
tmpDate = GridAmortSched.Rows(GridAmortSched.RowCount - 1).Cells(1).Value.ToString() '*** Moved outside of loop
For i As Integer = 1 To termCounter
    If GridAmortSched.RowCount <= 0 Then
        RowValues(0) = i
        RowValues(1) = dueDate.ToShortDateString
        dRow = dtable.Rows.Add(RowValues)
    Else

        RowValues(0) = i
        tmpDate = tmpDate.AddDays(30) '*** Increment date every time it passes here
        RowValues(1) = tmpDate.ToShortDateString '*** Assign the new value
        dRow = dtable.Rows.Add(RowValues)
    End If
Next
dtable.AcceptChanges()
GridAmortSched.DataSource = dtable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...