(我在試圖改寫這一整個問題是什麼,我試圖做更清晰)還原DataGridView的單元格內容原值
這是一個VB.Net WinForms項目被寫入VS2012。
當用戶改變一個DataGridView的單元格的內容,我改變了細胞的背景顏色在視覺上指示到細胞中,它們已經改變了用戶。這工作正常。但是,如果用戶在單元格內容初始編輯之前(即基本上是數據庫表格的值)將單元格內容更改回原來的值,我需要將背景顏色更改爲其默認行背景顏色。
所以,在CellValidating事件中,我現在用的是以下行來從DataGridView中的綁定數據集內的值和用戶輸入的值,這樣我就可以比較兩種:
Dim dgvColDataName As String = dgvEmployees.Columns(e.ColumnIndex).DataPropertyName
Dim dgvRowID As Integer = CInt(dgvEmployees.Rows(e.RowIndex).Cells(1).Value)
Dim index As Integer = EmployeesDataSet.Tables("employees").Rows.IndexOf(EmployeesDataSet.Tables("employees").Rows().Find(dgvRowID))
Dim originalValue As String = EmployeesDataSet.Tables("employees").Rows(index).Item(dgvColDataName).ToString()
Dim enteredValue As String = dgvEmployees.Rows(e.RowIndex).Cells(e.ColumnIndex).EditedFormattedValue.ToString()
這些得到正確的,DataGridView的當前單元格與綁定表格中的相應單元格之間的對應值。
這裏是我比較值,以確定如果輸入的值是一樣的原始數據集的價值:
If originalValue.ToUpper() <> enteredValue.ToString().ToUpper() Then
' Color the edited cell's background
dgvEmployees.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.LightPink
Else
' Set the back color to its default style
dgvEmployees.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = dgvEmployees.Rows(e.RowIndex).Cells(e.ColumnIndex).InheritedStyle.BackColor
End If
我認爲這是問題的答案。當值更改時,單元格背景正在更改。但我很驚訝地發現,如果細胞失去焦點(離開編輯模式),然後用戶點擊回該小區的值變化是什麼原來最初編輯前,小區背景色不改回默認的行/單元格顏色。即顯然,當細胞失去焦點,該數據集被改變,所以現在originalValue
是最後輸入的值。
我需要能夠得到時,首先裝載在DataGridView或者在最後保存的值。
任何想法?
UPDATE
一些調查研究後,我能弄清楚如何訪問指定單元格的數據集的原創,編輯前值。
在上面我的變量賦值代碼添加了此行來獲得相關數據集行:
Dim row As DataRow = EmployeesDataSet.Tables("employees").Rows(dsRowIndex)
然後我換成這一行:
Dim originalValue As String = EmployeesDataSet.Tables("employees").Rows(index).Item(dgvColDataName).ToString()
與此:
Dim originalValue As String = row(dgvColDataName, DataRowVersion.Original).ToString()
因此,經過徹底測試,我相信無論DGV的狀態如何,編輯控件等等該originalValue
將是從數據庫表附帶的價值。
我標誌着這個作爲回答...