2015-06-17 12 views
0

我的期望:Is WashIs ReturnComboBox列;當我點擊Is Wash時,我打算將Is Return更改爲true調用CellContentClicked事件時DataGridView值不會更改

這是我DataGridViewvalid XHTML

我試圖用CellContentClickCellClick

下面是我的函數:

private void dtGridViewLoan_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 

    if (e.RowIndex == -1) 
     return; 
    if (dtGridViewLoan.SelectedRows[0].Cells["is_wash"].Value != DBNull.Value) 
     if (Convert.ToBoolean(dtGridViewLoan.Rows[e.RowIndex].Cells["is_wash"].Value)) 
     { 
      dtGridViewLoan.Rows[e.RowIndex].Cells["is_return"].Value = true; 
     } 
} 

最後,不管我怎麼改變ComboBox值,數據本身保持返回false,即使它是true。請幫忙。

+0

問題並不清楚請詳細說明你想要什麼 – Lijo

+0

另一個[選項](http://stackoverflow.com/a/29418616/3773066)TaW的答案(它已經非常有效)。 – OhBeWise

回答

-1

taw很好的答案,謝謝你的幫助。你的回答是錯誤的,因爲我已經使用了你要求我使用的方法,但結果仍然是一樣的。

最後,我意識到它有什麼問題是因爲當我勾選複選框時,列本身不會調用單元格值更改的方法。因爲當我啓用編輯時,當你勾選複選框時,數據網格視圖將進入'編輯模式',單元格值更改方法只在你退出列時被調用(請參閱圖片的行標題,圖片顯示了鉛筆圖標)。我會盡量不使用啓用編輯這種情況下。感謝幫助。 http://i.stack.imgur.com/Rj1v1.png

+0

它不輸入'CellValueChanged' __until__數據被提交。但它立即___進入'CurrentCellDirtyStateChanged'事件,您可以在其中提交數據。這已經過測試,並且正常工作,因爲它應該直接來自MSDN。 – TaW

+0

您應該接受TaW的答案。這是正確的,一個很好的解決方案。當你嘗試時你可能做錯了什麼。 – Bitterblue

3

CellClick中檢查DataGridViewCheckboxCells的問題在於它們還沒有的新值。這對於其他細胞類型更有意義,它可能不得不經過或多或少複雜的驗證程序,或多或少地成功,但我們必須忍受它。

作爲每MSDN則有兩種選擇:要麼用於存儲,像 任何其他數據,或用於執行批量操作

典型地,複選框細胞值打算。如果您希望 在用戶單擊複選框單元格時立即作出響應,您可以處理DataGridView.CellClick事件 ,但在更新單元格值 之前發生此事件。如果您在 點擊時需要新值,則有一種方法是根據當前值計算期望值爲 。另一種方法是立即提交更改 ,並將DataGridView.CellValueChanged事件處理爲 對其作出響應。單擊單元格時要提交更改,您必須 處理DataGridView.CurrentCellDirtyStateChanged事件。在 處理程序中,如果當前單元格是複選框單元格,請調用 DataGridView.CommitEdit方法並傳遞Commit值。

我發現第一種方法看起來更簡單,但相當古怪。

這裏是第二個,有些清潔方法的一個例子: 首先,我們立刻犯任何複選框,點擊:

// add the event handler to the grid view 
dtGridViewLoan.CurrentCellDirtyStateChanged += 
       new EventHandler(dtGridViewLoan_CurrentCellDirtyStateChanged); 

private void dtGridViewLoan_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (dtGridViewLoan.CurrentCell is DataGridViewCheckBoxCell) 
     dtGridViewLoan.CommitEdit(DataGridViewDataErrorContexts.Commit); 
} 

下面這段代碼可以使用新的複選框值來工作:

private void dtGridViewLoan_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    // .. 
    if (dtGridViewLoan.Columns[e.ColumnIndex].Name == "is_wash") 
     { your code here... } 
    // .. 
} 
+1

「CurrentCellDirtyStateChanged」方式比計算方式更好。只需添加1個處理程序,就可以像平常一樣「沖洗」這些更改並處理它們。即使它被稱爲「髒」,它比另一個更清潔。 – Bitterblue

相關問題