2014-11-03 30 views
2

當且僅當特定單元格的值發生變化並且焦點已轉移到另一個單元格時,我需要執行一些邏輯。只有當一個值已經改變並且焦點已經改變時,該邏輯才需要執行......即,用戶已完成編輯單元格並繼續前進。它不應該僅僅通過改變細胞的焦點而關閉......只有當值被改變時。我一直在尋找和試驗事件,迄今爲止一直沒有成功。c#winforms:搜索datagridview事件,將更改單元格值和單元格重點後將觸發

請注意......這是一個以編程方式填充的未綁定網格視圖。我會喜歡使用傳統的綁定網格視圖,但這是我必須使用的,因爲我們現有的代碼是如何編寫的。

這是我曾嘗試...

DataGridView.CellValidated 「小區已完成驗證後發生。」 當我更改單元格值時發生此錯誤...然後每次更改單元格焦點時都會觸發,而不管第一次後是否實際更改單元格值。不符合我的需求,因爲每當我移動焦點時,它都會一直被調用...即使價值沒有變化。

DataGridView.CellValidating 「當單元失去輸入焦點並啓用內容驗證時發生。」 似乎沒有做我所需要的。

DataGridView.CellValueChanged 「當單元格的值發生更改時發生。」 每次在改變焦點之前更改數值時都會觸發。對我的目的無用。

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

感謝, 約翰

+0

也許有人能告訴我爲什麼,問題是向下投了票,這樣我就不會再犯我在這裏再犯的任何錯誤了? – JohnLaird 2014-11-03 21:45:01

回答

0

使用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]; 
} 
0

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

相關問題