Amar chand123 Ответов: 2

Проблема в цикле в datagridview в C#


Я пробую код для автоматического добавления цикла месяцев в моем DataGridView на языке C#
Код отлично работает, когда я использую дату от 1 до 28, например (15/12/2020, 25/01/2020)
Но у меня есть проблема когда я использую 29-30 или 31 у меня есть проблема
например
Результат Моего Кода:---
Date1 15/07/2020(Work Fine)   Date2 30/07/2020(Problem)    Date3 31/07/2020(Problem)
  Result(Date1)   ......       Result(Date2)..........            Result (Date3)
15/08/2020      ........       30/08/2020 ............                    31/08/2020
15/09/2020      ........       30/09/2020 ............                    30/09/2020
15/10/2020      ........       30/10/2020 ............                    30/10/2020(P)
15/11/2020      ........       30/11/2020 ............                    30/11/2020
15/12/2020      ........       30/12/2020 ............                    30/12/2020(P)
15/01/2021      ........       30/01/2021 ............                    30/01/2021(P)
15/02/2021      ........       28/02/2021 ............                    28/02/2021(P)
15/03/2021      ........       28/03/2021(P)........                  28/03/2021(P) 
15/04/2021      ........       28/04/2021(P)........                  28/03/2021(P)
15/05/2021      ........       28/05/2021(P)........                  28/03/2021(P)
15/06/2021      ........       28/06/2021(P)........                  28/03/2021(P)
15/07/2021      ........       28/07/2021(P)........                  28/03/2021(P)


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

Мой код таков
private void LoadDate()
{
    DateTime dt=Convert.ToDateTime(textBoxLoanDate.Text);
    for (int i = 0; i < 1; i++)
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        dt = dt.AddMonths(1);
        row.Cells["Date"].Value = dt.ToString("dd/MM/yyyy");
        
    }
}

Пожалуйста, помогите мне решить эту проблему

OriginalGriff

Какая проблема?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Есть ли какие-либо сообщения об ошибках, и если да, то что это такое и где они происходят?

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

Amar chand123

проблема заключается в том, что когда я использую цикл месяц, то, как вы видите, когда я использую (Date1) код цикла работает нормально, но когда я использую ( Date2 или 3 ) мой код цикла не работает должным образом ( если я использую дату 31/12/2020, то после 28 февраля моя дата изменения кода 28/03/2021, 28/04/2021, 28/05/2021, но мне нужен этот результат 31/03/2021, 30/04/2021, 31/05/2021

2 Ответов

Рейтинг:
14

Tomas Takac

Проблема в том, что вы используете предыдущую дату, а затем добавляете к ней один месяц. Если вместо этого взять начальную дату и всегда добавлять к ней число месяцев то последовательность будет правильной:

var start = new DateTime(2020, 8, 30);
for (int i = 0; i < 10; i++)
{
	Console.WriteLine(start.AddMonths(i).ToString("dd/MM/yyyy"));
}

Результат:
30/08/2020
30/09/2020
30/10/2020
30/11/2020
30/12/2020
30/01/2021
28/02/2021
30/03/2021
30/04/2021
30/05/2021

В вашем коде:
private void LoadDate()
{
    DateTime dt=Convert.ToDateTime(textBoxLoanDate.Text);
    var monthCounter = 1;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells["Date"].Value = dt.AddMonths(monthCounter).ToString("dd/MM/yyyy");
        monthCounter++;       
    }
}


Amar chand123

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

Tomas Takac

Я обновил свой ответ с помощью вашего кода, как он должен выглядеть. Но вы должны понимать эти понятия и уметь применять их в разных ситуациях.

Amar chand123

Сэр, если я использую дату 31.08.2020 в вашем коде, то я покажу результат---
30/09/2020
30/11/2020
28/02/2021
28/06/2021
28/11/2021
28/05/2022
28/12/2022
28/08/2023

Tomas Takac

Моя ошибка, я исправил ошибку, проверьте еще раз.

Amar chand123

Спасибо за помощь сэр
этот код работает нормально и Сэр не могли бы вы объяснить мне какая проблема в вашем предыдущем коде для моего дальнейшего использования

Tomas Takac

dt = dt.AddMonths(monthCounter) - это была модификация исходной переменной, хитрость заключается в том, чтобы сохранить исходное значение dt и добавить к нему количество месяцев.

Amar chand123

Спасибо

Рейтинг:
0

OriginalGriff

Цитата:
проблема заключается в том, что когда я использую цикл месяц, то, как вы видите, когда я использую (Date1) код цикла работает нормально, но когда я использую ( Date2 или 3 ) мой код цикла не работает должным образом ( если я использую дату 31/12/2020, то после 28 февраля моя дата изменения кода 28/03/2021, 28/04/2021, 28/05/2021, но мне нужен этот результат 31/03/2021, 30/04/2021, 31/05/2021

Самый безопасный способ сделать это-взять первый месяц, который вы хотите, в последний день, добавить один месяц и вычесть один день. Это всегда дает вам последний день этого месяца, независимо от того, сколько дней он содержит и какова была ваша первоначальная дата начала.
Это может помочь: Расширения DateTime, чтобы сделать некоторые простые задачи немного более читабельными[^]