计时器使用DataGridView?

时间:2017-03-26 00:01:24

标签: c# datagridview timer oledbconnection qelapsedtimer

我正在尝试使用Timer。如果已过,则当前时间DateTime.Now应显示在我的文本框中注意就像提醒一样。

我的计时器正在运行,但只有点击datagridview。如果我没有单击datagrid,则没有任何反应。如果我点击显示备注并删除行?

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 个答案:

答案 0 :(得分:0)

更改单元格中的值或以某种方式操纵行不一定会导致显示的内容发生更改。通常,您的datagrid绑定到List,其中T是实现INotifyPropertyChanged的对象。这样做是因为INotifyPropertyChanged通知网格某些内容已发生变化,并且网格需要自行更新以反映该更改。

在您提供的代码中,我建议在timer elapsed方法结束时添加对datagridview的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
}

答案 1 :(得分:0)

已解答:(我的问题已编辑。)

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();
        }