2017-03-26 2 views
0

私はタイマーを使用しようとしています。経過している場合は、現在の時刻DateTime.Nowが私のテキストボックスに表示されるはずです。DataGridViewでタイマーが終了しましたか?

私のタイマーは動作していますが、これは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 [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が何かが変更されたことをグリッドに通知し、その変更を反映するためにグリッドを更新する必要があるためです。

あなたが提供したコードでは、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 
} 
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(); 
     } 
関連する問題