簡體   English   中英

c#winforms:搜索將更改單元格值和單元格焦點后將觸發的datagridview事件

[英]c# winforms: searching for datagridview event that will fire after changing cell value AND cell focus

當且僅當特定單元格的值發生變化並且焦點已轉移到另一個單元格時,我才需要執行一些邏輯。 僅當值和焦點都已改變時才需要執行邏輯...即用戶完成了單元格的編輯並繼續前進。 它不應僅通過更改單元格焦點而關閉...僅當值更改時。 我一直在搜索事件並進行實驗,但到目前為止沒有成功。

請注意...這是以編程方式填充的未綁定網格視圖。 我本來希望使用常規的綁定網格視圖,但這是我必須使用的,因為我們現有的代碼是如何編寫的。

這就是我嘗試過的...

DataGridView.CellValidated“在單元格完成驗證后發生。” 當我更改單元格值時,此方法就會觸發...然后,每次更改單元格焦點之后,無論我是否在第一次之后實際更改單元格值,都會觸發此操作。 不符合我的需求,因為只要我轉移焦點,它就會不斷被調用……即使價值沒有變化。

DataGridView.CellValidating“在單元格失去輸入焦點,從而啟用內容驗證時發生。” 似乎也沒有滿足我的需求。

“ DataGridView.CellValueChanged”在單元格的值更改時發生。 每次我更改值時都會觸發此操作...在轉移焦點之前。 出於我的目的,也沒有用。

我真的不知道我使用的是正確的事件,還是沒有在某處設置屬性,還是沒有調用某種方法來更改網格視圖的狀態。 幫助將不勝感激。

謝謝,約翰

使用事件組合;
觸發CellValueChanged事件時,設置一個標志,指示該值已更改。
然后,當觸發CellLeave事件時,檢查該標志並相應地執行您的邏輯。

使用Cellvalidating事件檢查該值是否已更改,或者是否將其放置在globale布爾值上,並保存當前單元格的行索引和列,並在SelectionChanged事件上檢查該值是否更改:如果沒有更改,請使用DatagridCurrentCell將專注於保存索引行和列的保存

datagridview_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
  if(e.FormattedValue == (theOldValue))
  {
      changed = false; 
      currentIndexRow= e.RowIndex; 
      currentIndexColumn= e.ColumnIndex; 
      e.cancel = true; 

  }
}
datagridview_SelectionChanged(object sender, EventArgs e)
{
   if(!changed)
    datagridview.CurrentCell = datagridview.Rows[currentIndexRow].Cells[currentIndexColumn];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM