После обработки одной из таблиц DGVW1
данные (например) перетекают в DGVW3
и в момент, когда это происходит в ячейку записывается время (код прилагается). Нужно чтобы каждая последующая ячейка со временем была на +1 секунду.
Так это выглядит на данный момент:
А теперь нюансы:
время не должно повторятся.
если из DGVW1
данных пришло 20 то и секунд последующих ячеек должно прибавится 20, НО в этот промежуток времени человек может обработать в DGVW1
еще один документ и получается, что он находится в будущем, поэтому если перенесет эти обработанные данные в DGVW3
то эти данные будут во времени не корректны, суть должна быть в том, что бы новые данные в этот промежуток времени вставились после (грубо говоря новая ячейка должна иметь время 16:45:35 хотя время у него на часах 16:45:32)
добавить миллисекунды не вариант...
Ну и, собственно, сам код переноса из одного 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("какая-то ошибка");
} // все что ниже удаляет последнее повторение
Путем нелегкого мозгового штурма, был переделан костыль.
костыль работает, но если нажать на кнопку с этим кодом в несколько миллисекунд, то будет повторение. на первое время сойдет
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")
);
}
При вызову Soldier метод SoldierFindQ() возвращает произведние weight и hight, как и нужно
я сделал голосового ассистента на Python, но решил, перейти на C#По видеоуроку я написал этот код который должен слушать микрофон и писать цифру...
Есть анонимный метод (выполняет через рефлексию методы объекта)
Не понимаю почему сохранение не работает, скинул весь скрипт, обратите внимание например на функцию MusicVolumeSet, и в старте на её загрузку, я вроде...