2017-03-26 3 views
0

타이머를 사용하려고합니다. 경과 된 경우 현재 시간 DateTime.Now이 내 텍스트 상자에 표시됩니다. 알림과 같습니다.Timer가 DataGridView와 함께 경과 되었습니까?

내 타이머가 작동하지만, 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 [email protected]", 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(); 
} 
+0

당신은 당신이 아니라 질문에 대한 편집 등의 답변으로 게시해야 문제에 대한 해결책을 발견 한 경우. – Servy

답변

0

셀에서 값을 변경하거나 어떤 식 으로든 행을 조작한다고해서 반드시 표시되는 내용이 변경되지는 않습니다. 일반적으로 DataGrid는 List에 바인딩됩니다. 여기서 T는 INotifyPropertyChanged를 구현하는 일부 객체입니다. INotifyPropertyChanged는 그리드에 무언가가 변경되었고 그리드가 그 변경 사항을 반영하도록 업데이트해야하기 때문에이를 수행합니다.

제공된 코드에서 타이머 경과 메서드의 끝 부분에있는 datagridview의 새로 고침 메서드에 대한 호출을 추가하는 것이 좋습니다.

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 
} 
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 [email protected]", 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(); 
     }