我有一個ReadOnly DataGridView綁定到bindingSource。表單上還有其他控件可以更新DataGridViewCells - 它們是綁定到綁定源的數據綁定。我需要根據DataViewRowState的源代碼更改datagridviewCell樣式 - .Current不會幫助我 - 我需要做的是track是單元格的原始值 - 爲單元格正常着色,如果它被修改爲藍色。我知道我可以得到DataRowViewState,它給了我所得到的版本 - 但它總是返回當前(因爲它是默認值),我確實需要當前 - 我只想知道它是否與原始版本不同這個特定的列。因爲在我編輯bindingsource的時候,我已經有了這行,看起來並不是一個簡單的方法或屬性,說這行是原始的,或者是修改的。我是否需要在表格上使用filterstates來運行select以獲取我的行,並查看是否返回結果,如果是這樣,請更改單元格以執行此操作?使用DataViewRowState將樣式分配給DataGridViewCell
相關代碼: - 我知道它是在VB.net中,但如果你有C#示例,那很好,我不在乎 - .net代碼是代碼,我可以將其轉換。
Private Sub UpdateCellValue(columnName As String, textValue As String)
If dgvBayList.SelectedRows.Count > 0 Then
Dim crow As DataGridViewRow = dgvBayList.SelectedRows(0)
Dim drv As DataRowView = DirectCast(bsBins.Current, DataRowView)
If crow.Cells(columnName).Value = textValue Then
Exit Sub
End If
drv.BeginEdit()
drv.Row.BeginEdit()
drv.Row.SetField(Of String)(columnName, textValue)
' My Problem here is of course it is always original,
' the row states of the Row always show Modified.
' This happens when the binding source gets filled and bound to datagridview.
Select Case drv.RowVersion
Case DataRowVersion.Original
Dim val As String = drv.Row(0).ToString()
Exit Select
Case DataRowVersion.Proposed
Dim val As String = drv.Row(0).ToString()
Exit Select
Case DataRowVersion.Current
Dim val As String = drv.Row(0).ToString()
Exit Select
Case DataRowVersion.Default
Dim val As String = drv.Row(0).ToString()
Exit Select
End Select
crow.Cells(columnName).Value = textValue
drv.Row.EndEdit()
drv.EndEdit()
Dim dt As DataTable = sortingDataSet.bins
End If
End Sub
看來你需要drv.Row.RowState不DRV .RowVersion – Steve
@Steve我的RowState總是被修改甚至在修改之前;我不知道爲什麼它是這樣的。綁定源綁定到一個dataset.Table,它在表單加載時被填充。因爲它總是聲明從開始修改 - 這並沒有幫助我。我還需要知道用戶是否將它改回原來的 - 我希望它看起來像一個正常的不變的單元格。我想我需要選擇使用rowfilter - 應該有一個更簡單的方法。我希望有一個。 – Ken
如果我查看單元格格式事件中的'RowState',它對我來說工作正常。 – Plutonix