Таймер истек с DataGridView?
Я пытаюсь использовать таймер. По истечении текущего времени DateTime.Now
должен появиться в моем текстовом поле Примечание, как напоминание.
Мой таймер работает, но только если я нажму на datagridview
, Если я не нажму на сетку данных, ничего не произойдет. Если я нажму показать заметки и удалить строку?
System.Timers.Timer EntTimer = new System.Timers.Timer(1000);
private void Timer()
{
EntTimer.Elapsed += EntTimer_Elapsed;
EntTimer.Enabled = true;
EntTimer.Start();
}
private void EntTimer_Elapsed(object Sender, System.Timers.ElapsedEventArgs e)
{
int columnIndex = dgV.CurrentCell.ColumnIndex;
int rowIndex = dgV.CurrentCell.RowIndex;
var TheDate = DateTime.Now;
var dgvDate = Convert.ToDateTime(dgV.Rows[rowIndex].Cells["Tarih"].Value);
if (TheDate > dgvDate)
{
DeleteMet();
}
EntTimer.AutoReset = true;
}
DeleteMet()
private void DeleteMet()
{
int rowIndex = dgV.CurrentCell.RowIndex;
string SelectRow =dgV.Rows[rowIndex].Cells[0].Value.ToString();
conn.Open();
OleDbCommand cmd = new OleDbCommand("Delete from Timer Where ID=@Id", conn);
cmd.Parameters.Add(new OleDbParameter("@Id", SelectRow));
if (cmd.ExecuteNonQuery() == 1)
{
int rowIndex = dgV.CurrentCell.RowIndex;
string message = txtNotes.Text = dgV.Rows[rowIndex].Cells["Notes"].Value.ToString();
MessageBox.Show(message, "Hatırlatma !!!", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
}
conn.Close();
MainShow();
FirstRowHL();
}
2 ответа
Изменение значения в ячейке или манипулирование строкой не обязательно приведет к изменению отображаемого значения. Обычно ваша сетка данных связана с List, где T - это некоторый объект, который реализует INotifyPropertyChanged. Вы делаете это, потому что INotifyPropertyChanged информирует сетку о том, что что-то изменилось, и сетка должна обновиться сама, чтобы отразить это изменение.
В коде, который вы предоставили, я бы предложил добавить вызов метода refresh представления данных в конце вашего метода истекшего таймера.
private void EntTimer_Elapsed(object Sender, System.Timers.ElapsedEventArgs e)
{
int columnIndex = dgV.CurrentCell.ColumnIndex;
int rowIndex = dgV.CurrentCell.RowIndex;
var TheDate = DateTime.Now;
var dgvDate = Convert.ToDateTime(dgV.Rows[rowIndex].Cells["Tarih"].Value);
if (TheDate > dgvDate)
{
DeleteMet();
}
EntTimer.AutoReset = true;
dgv.Refresh();//ADD THIS LINE
}
Решено: (мой вопрос отредактирован.)
System.Timers.Timer EntTimer = new System.Timers.Timer(1000);
private void Timer()
{
EntTimer.Elapsed += EntTimer_Elapsed;
EntTimer.Enabled = true;
EntTimer.Start();
}
private void EntTimer_Elapsed(object Sender, System.Timers.ElapsedEventArgs e)
{
int columnIndex = dgV.CurrentCell.ColumnIndex;
int rowIndex = dgV.CurrentCell.RowIndex;
var TheDate = DateTime.Now;
var dgvDate = Convert.ToDateTime(dgV.Rows[rowIndex].Cells["Tarih"].Value);
if (TheDate > dgvDate)
{
DeleteMet();
}
EntTimer.AutoReset = true;
}
DeleteMet()
private void DeleteMet()
{
int rowIndex = dgV.CurrentCell.RowIndex;
string SelectRow =dgV.Rows[rowIndex].Cells[0].Value.ToString();
conn.Open();
OleDbCommand cmd = new OleDbCommand("Delete from Timer Where ID=@Id", conn);
cmd.Parameters.Add(new OleDbParameter("@Id", SelectRow));
if (cmd.ExecuteNonQuery() == 1)
{
int rowIndex = dgV.CurrentCell.RowIndex;
string message = txtNotes.Text = dgV.Rows[rowIndex].Cells["Notes"].Value.ToString();
MessageBox.Show(message, "Hatırlatma !!!", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
}
conn.Close();
MainShow();
FirstRowHL();
}