Datatable に新しいフィールド/列を追加し、代わりにそのフィールドの行全体の値を 1 つだけ保持する目的の機能を最終的に達成しました。「、、E、、、E」のように各セルの状態/スタイルを表す文字列を保存します。したがって、このサンプル文字列は、インデックス 2 と 5 のセルに編集済みのスタイルが必要であることを示します。
CellValueChanged イベントのサンプルでその文字列を作成/変更します。
Private Sub DataGridView_CellValueChanged(sender As System.Object, e As DataGridViewCellEventArgs) Handles DataGridView.CellValueChanged
If e.RowIndex = -1 Or IsNothing(DataGridView.CurrentCell) Then
Return
End If
Dim cellPosition As Short = DataGridView.CurrentCell.ColumnIndex
Dim Styles(25) As String
Dim stylesCell = DataGridView.Rows(e.RowIndex).Cells("CellStyleDescriptor").Value
If Not IsDBNull(stylesCell) And _
Not IsNothing(stylesCell) Then
Styles= Split(stylesCell, ",")
End If
If IsDBNull(DataGridView.Rows(e.RowIndex).Cells("Id").Value) Then
For i As Integer = 0 To 25 'New row is being added
Styles(i) = "N"
Next
Else
Styles(cellPosition) = "E" 'Edited/Modified Cell
End If
DataGridView.Rows(e.RowIndex).Cells("CellStyleDescriptor").Value = String.Join(",", String)
End Sub
CellFormatting イベントでスタイルを読み取り/適用します。サンプル:
Private Sub DataGridView_CellFormatting(sender As System.Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView.CellFormatting
If e.RowIndex = -1 Or e.ColumnIndex = -1 Then
Return
End If
Dim styles(25) As String
styles = Split(DataGridView.Rows(e.RowIndex).Cells("CellStyleDescriptor").Value, ",")
Select Case styles(e.ColumnIndex)
Case "E" 'Edited cell
e.CellStyle.BackColor = modifiedStyle.BackColor
e.CellStyle.ForeColor = modifiedStyle.ForeColor
Case "N" 'New cell
e.CellStyle.BackColor = newStyle.BackColor
e.CellStyle.ForeColor = newStyle.ForeColor
End Select
End Sub
これが誰かに役立つことを願っています