Переопределение времени при переносе данных в DataGridView

После обработки одной из таблиц DGVW1 данные (например) перетекают в DGVW3 и в момент, когда это происходит в ячейку записывается время (код прилагается). Нужно чтобы каждая последующая ячейка со временем была на +1 секунду.
Так это выглядит на данный момент:

введите сюда описание изображения

А теперь нюансы:

  1. время не должно повторятся.

  2. если из DGVW1 данных пришло 20 то и секунд последующих ячеек должно прибавится 20, НО в этот промежуток времени человек может обработать в DGVW1 еще один документ и получается, что он находится в будущем, поэтому если перенесет эти обработанные данные в DGVW3 то эти данные будут во времени не корректны, суть должна быть в том, что бы новые данные в этот промежуток времени вставились после (грубо говоря новая ячейка должна иметь время 16:45:35 хотя время у него на часах 16:45:32)

    введите сюда описание изображения

  3. добавить миллисекунды не вариант...

Ну и, собственно, сам код переноса из одного DGVW в другой DGVW

string name_profil;
DateTime now = DateTime.Now;

if (dataGridView2.SelectedCells[0].Value.ToString() == "")
{
    name_profil = "Без профиля";
}
else
{
    name_profil = dataGridView2.CurrentRow.Cells[0].Value.ToString();
}

try
{
    if (dataGridView3.RowCount - 1 > 1) // если что тут была >2 поменять если что то пойдет не по плану
    {
        for (int i = dataGridView3.RowCount - 2; i >= 0; i--)
        {
            var isEquals = (String.Compare(dataGridView3.Rows[i].Cells[0].Value.ToString().ToUpper(), name_profil.ToUpper()) == 0);
            var cellsIsEmpty = string.IsNullOrEmpty(dataGridView3.Rows[i].Cells[1].Value.ToString());
            //var cellsIsEmpty = cellsIsEmpty && string.IsNullOrEmpty (dataGridView3.Rows[i].Cells[2].Value.ToString ());

            if (cellsIsEmpty)
            {
                if (!isEquals)
                {
                    dataGridView3.Rows.Add(name_profil, "", "", now.ToString("dd.MM.yyyy HH:mm:ss"));
                }
                break;
            }
        }
    }
    else
    {
        dataGridView3.Rows.Add(name_profil, "", "", now.ToString("dd.MM.yyyy HH:mm:ss"));
    }

    for (int j = 0; j < dataGridView3.RowCount; j++)
    {
        if (dataGridView3.Rows[j].Cells[0].Value == dataGridView2.CurrentRow.Cells[0].Value)
        {
            dataGridView3.Rows[j].Cells[0].Style.BackColor = Color.Red;
        }

    }
    for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
    {
        DataGridViewRow hh = dataGridView1.Rows[i];

        dataGridView3.Rows.Add(hh.Cells[0].Value.ToString().ToUpper().Clone(),
            hh.Cells[1].Value.ToString().Clone(),
            hh.Cells[2].Value.ToString().Clone(),
            now.ToString("dd.MM.yyyy HH:mm:ss"));
    }
    remove_tire();
}
catch
{
    MessageBox.Show("какая-то ошибка");
} // все что ниже удаляет последнее повторение

Ответы (1 шт):

Автор решения: Виктор Юхимчук

Путем нелегкого мозгового штурма, был переделан костыль.

  1. при переносе из одного dgvw в другой сделать один большой цикл для всего этого дела и добавлять построчно, так же к существующему времени + 1 секунда.
  2. при каждом нажатии кнопки прибавлять к существующему времени столько секунд, сколько элементов.
  3. код прилагаю.

костыль работает, но если нажать на кнопку с этим кодом в несколько миллисекунд, то будет повторение. на первое время сойдет

введите сюда описание изображения

        string name_profil;
        DateTime now = DateTime.Now;
        now = now.AddSeconds(dataGridView3.Rows.Count);  ** 3 пункт**
        if (dataGridView2.SelectedCells[0].Value.ToString() == "")
        {
            name_profil = "Без профиля";
        }
        else
        {
            name_profil = dataGridView2.CurrentRow.Cells[0].Value.ToString();
        }
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            if (dataGridView3.RowCount - 1 > 1) 
            {
                for (int k = dataGridView3.RowCount - 2; k >= 0; k--)
                {
                    var isEquals =
                        (String.Compare(dataGridView3.Rows[k].Cells[0].Value.ToString().ToUpper(), name_profil.ToUpper()) == 0);

                    var cellsIsEmpty =
                        string.IsNullOrEmpty(dataGridView3.Rows[k].Cells[1].Value.ToString());
                    //var cellsIsEmpty = cellsIsEmpty && string.IsNullOrEmpty (dataGridView3.Rows[i].Cells[2].Value.ToString ());

                    if (cellsIsEmpty)
                    {
                        if (!isEquals)
                        {
                            dataGridView3.Rows.Add(name_profil, "", "", now.ToString("dd.MM.yyyy HH:mm:ss"));
                            
                        }
                        now = now.AddSeconds(1); **добавление секунды если повторений названий нет **
                        break;
                    }
                }
            }
            else
            {
                now = now.AddSeconds(1); **это тоже плюс секунда если профиля нет**
                dataGridView3.Rows.Add(name_profil, "", "", now.ToString("dd.MM.yyyy HH:mm:ss"));
            }
            for (int j = 0; j < dataGridView3.RowCount; j++)
            {
                if (dataGridView3.Rows[j].Cells[0].Value == dataGridView2.CurrentRow.Cells[0].Value)
                {
                    dataGridView3.Rows[j].Cells[0].Style.BackColor = Color.Red;
                 }
            }
                DataGridViewRow hh = dataGridView1.Rows[i];
                now = now.AddSeconds(1); **и вот тут еще плюс секунду**
                dataGridView3.Rows.Add(hh.Cells[0].Value.ToString().ToUpper().Clone(),
                hh.Cells[1].Value.ToString().Clone(),
                hh.Cells[2].Value.ToString().Clone(),
                 now.ToString("dd.MM.yyyy HH:mm:ss")
                 ); 
                          
        }
→ Ссылка