0

次のように、データソースを持つ DatagridView があります。

bindingSource = DataTable
dataGridView.DataSource = bindingSource

セルが編集されるか、新しい行が追加されると、別の書式設定スタイルを適用します。列ヘッダーの 1 つをクリックして dataGridView を並べ替えると、書式設定スタイルが失われます。だから私の質問は次のとおりです。

datagridview を並べ替えた後、どのセルが変更または追加されたかをどのように知ることができるので、書式設定スタイルを再適用できます

VB .Net または C# は問題ありません

4

1 に答える 1

0

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

これが誰かに役立つことを願っています

于 2013-06-27T17:43:14.087 に答える