2016-02-11 109 views
0

我有一個有點問題與DataGridView中的CellEndEdit事件。雖然我理解這個問題實際上的概念,但任何繞過它的企圖似乎都失敗了。datagridview的CellEndEdit閃光兩次

基本上,我有一個datagridview,在CellEndEdit事件中,我對數據庫進行了檢查以確保該條目不是重複的。如果是這樣,我用一個消息框提示用戶告訴他們不能輸入重複項,然後以編程方式將值更改回其原始狀態/值,並將單元格返回到「編輯」狀態。

我的理解是,我是編程改變值的事實就是爲什麼事件觸發兩次。爲了規避,我在首次進入事件時設置了一個標誌,然後提示+設置+重新編輯,然後將該標誌設置爲false。這不起作用......任何人都可以告訴我爲什麼或者我該如何做到這一點?

這裏的事件代碼:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if(e.ColumnIndex == this.dataGridView1.Columns["Name"].ColumnIndex) 
    { 
     if(!this.CellBeingEdited) 
     { 
      string NewName = this.dataGridView1.Rows[e.RowIndex].Cells["Name"].Value.ToString(); 
      //-== DATABASE CODE REMOVED ==- 
      bool IsDuplicate = ...; 
      if(IsDuplicate) 
      { 
       MessageBox.Show("Cannot have duplicate item names at this level!"); 
       this.dataGridView1.CurrentCell = this.dataGridView1.Rows[e.RowIndex].Cells["Name"]; 
       this.CellBeingEdited = true; 
       this.dataGridView1.CurrentCell.Value = this.LastEditedRowName; 
       this.CellBeingEdited = false; 
       this.dataGridView1.BeginEdit(false); 
       return; 
      } 
     } 
    } 
} 

回答

1

這段代碼不會觸發兩次,當我連續編輯值:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     string test = "test"; 
     if (this.dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == test) 
     { 
      this.dataGridView1.CurrentCell = this.dataGridView1.Rows[e.RowIndex].Cells[0]; 
      this.dataGridView1.CurrentCell.Value = "not test"; 
      this.dataGridView1.BeginEdit(false); 
      return; 
     } 
    } 

也許你在其他地方調用事件?

+0

同樣的問題...現在它也激發每一個數據綁定,形式加載,或電網刷新時間...... – MaxOvrdrv

+0

你說的細胞驗證閃光兩次每次驗證? –

+0

不......我是說,它激發所有的時間...加載窗體時,當窗體顯示,當綁定完成後,當電網UI刷新,當值發生變化,等等。如果我使用這個事件,我將不得不捕捉並標記每個事件觸發和逃脫的實例,我真的只想在單元格內容完成編輯時檢查並執行邏輯。 – MaxOvrdrv