vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
DataGridView vergisst Tags 
Autor: Peter_nun_aber
Datum: 01.02.11 10:46

Hallo,

seit Tagen schlage ich mich mit dem Problem herum, dass ein schick formatiertes DataGridView nach der Umsortierung durch Klick auf den Columnheader seine Formatierung vergisst.

Dazu findet man auch eine Menge im Internet, z.B. über "DataGridView lost CellStyle on Sort". Alle Tips gehen aber davon aus, dass das Styling in Abhängigkeit des Zellinhalts geschehen soll. Ich habe aber einen weiteren Wert in der Datatable, welchen ich nicht anzeigen möchte, und den Value somit überschreiben muss. Die Farbe der Zelle soll den Wert verdeutlichen. dgvtest.CellFormating event fällt also aus.

Da der Style nicht erhalten bleibt, dachte ich es wäre eine gute Idee die "Steuerinfomation" im Tag der Zelle abzulegen, ABER: die ist nach einem Sort auch leer. What nu?

Hier ein Beispiel zum schnellen Ausprobieren. Alles was Ihr braucht ist eine form mit einem datagridview Namens "dgvTest", den Rest macht der Code.

Public Class Form1
 
    Dim dtTest As New DataTable
 
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
      Handles Me.Load
        Try
 
            With dtTest.Columns
                .Add("Wert", GetType(System.String))
            End With
 
            With dtTest.Rows
                .Add(New Object() {"Apfel#24#12"})
                .Add(New Object() {"Birne#12#12"})
                .Add(New Object() {"Pflaume#34#16"})
            End With
 
 
            With dgvTest
                .DataSource = dtTest
                .AutoResizeRows()
                .AutoSizeRowsMode = _
                  DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
                .AllowUserToAddRows = False 'letzte (leere) Zeile verbergen
                .RowHeadersVisible = False 'Zeile mit dem Pfeil vor der 
                ' Kommunikation verbergen
                .AlternatingRowsDefaultCellStyle.BackColor = Color.LemonChiffon
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .ReadOnly = True
 
            End With
 
            For Each row As DataGridViewRow In dgvTest.Rows
                For Each cell As DataGridViewCell In row.Cells
 
                    If Not IsDBNull(cell.Value) Then
 
                        Dim strWerte() As String = cell.Value.Split("#")
                        If strWerte.Length = 3 Then
 
                            'Zellwert korrigieren, damit der 3. Wert entfällt
                            cell.Value = strWerte(0) & "  " & strWerte(1)
 
                            'Farben und Tags festlegen
                            If CDec(strWerte(1)) < CDec(strWerte(2)) Then
                                cell.Style.BackColor = Color.LightGreen
                                cell.Tag = "LightGreen"
                            ElseIf CDec(strWerte(1)) = CDec(strWerte(2)) Then
                                cell.Style.BackColor = Color.Gold
                                cell.Tag = "Gold"
                            ElseIf CDec(strWerte(1)) > CDec(strWerte(2)) Then
                                cell.Style.BackColor = Color.Salmon
                                cell.Tag = "Salmon"
                            End If
 
                        End If
                    End If
 
                Next
            Next
 
 
        Catch ex As Exception
            If MessageBox.Show("Es ist ein Fehler aufgetreten." + vbLf + _
              "Möchten Sie eine erweiterte Fehlermeldung?", "Provendis" & _
              "Fehlerbehandlung", MessageBoxButtons.YesNo, _
              MessageBoxIcon.Error) = MsgBoxResult.Yes Then MsgBox(ex.ToString)
            Exit Sub
        End Try
    End Sub
 
    Private Sub dgvTest_Sorted(ByVal sender As Object, ByVal e As _
      System.EventArgs) Handles dgvTest.Sorted
        Try
 
            For Each row As DataGridViewRow In dgvTest.Rows
                For Each cell As DataGridViewCell In row.Cells
 
                    If Not IsDBNull(cell.Value) Then
 
                        'Farben und Tags festlegen
                        If cell.Tag = "LightGreen" Then
                            cell.Style.BackColor = Color.LightGreen
 
                        ElseIf cell.Tag = "Gold" Then
                            cell.Style.BackColor = Color.Gold
 
                        ElseIf cell.Tag = "Salmon" Then
                            cell.Style.BackColor = Color.Salmon
 
                        End If
 
                    End If
 
                Next
            Next
 
 
        Catch ex As Exception
            If MessageBox.Show("Es ist ein Fehler aufgetreten." + vbLf + _
              "Möchten Sie eine erweiterte Fehlermeldung?", "Provendis" & _
              "Fehlerbehandlung", MessageBoxButtons.YesNo, _
              MessageBoxIcon.Error) = MsgBoxResult.Yes Then MsgBox(ex.ToString)
            Exit Sub
        End Try
 
    End Sub
 
 
End Class
Hat einer eine Idee? Danke für Eure Zeit.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
DataGridView vergisst Tags2.849Peter_nun_aber01.02.11 10:46
Re: DataGridView vergisst Tags1.135ModeratorDaveS01.02.11 14:18
Re: DataGridView vergisst Tags1.112Peter_nun_aber02.02.11 14:05
Re: DataGridView vergisst Tags1.221ModeratorDaveS02.02.11 14:37
Re: DataGridView vergisst Tags1.133Peter_nun_aber02.02.11 16:35
Re: DataGridView vergisst Tags1.119ModeratorDaveS02.02.11 17:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel