Таймер истек с 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();
        }
Другие вопросы по тегам