none
Bewertung/Anmerkung zu DGV ColorPik und Zellenfärbung RRS feed

  • Frage

  • Servus Experten,

    der folgende Code funzt einwandfrei, nur bei entsprechend vielen DS ist die Performance(beim Datenladen) doch nicht so gegeben wie gewünscht. Ihr Experten seid so nett und schaut mal auf den Code ob man den besser bzw. fixer machen könnte. (Wenn ihr den Code als gut beurteilt, schreibt das auch, dann kann ich den Thread gleich wieder zu machen)

    Die Ausgangsituation ist die: Ein Daten-Table mit 5 Feldern;eines davon (Name: Farbe) enthält eine Colordefinition die vom User festgelegt werden kann. Ich habe nun ein DGV mit einer  Spalte Farbe und einer Spalte (Image) um den Farbdialog aufzurufen. Wir war es nicht möglich, dies in einer Spalte umzusetzen, da eine Buttonspalte den Button immer über die ganz Spaltenbreite zieht und dem Button auch kein Image zugeordnet werden konnte.

    Also hier der Code:

        Private Sub MonarchDataGridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles MonarchDataGridview1.CellContentClick
            'Farbdialog aufruf 
            If MonarchDataGridview1.Columns(e.ColumnIndex).Name = "FarbAuswahl" Then
                If (ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                    MonarchDataGridview1.Rows(e.RowIndex).Cells("Farbe").Style.BackColor = ColorDialog1.Color
                    MonarchDataGridview1.Rows(e.RowIndex).Cells("Farbe").Style.ForeColor = ColorDialog1.Color
                    CCFFeedbackGruppenBindingSource.Current("Farbe") = ColorTranslator.ToHtml(ColorDialog1.Color)
                End If
            End If
        End Sub
    
        Private Sub MonarchDataGridview1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles MonarchDataGridview1.CellFormatting
            'Zelle je nach Farbdefinition einfärben
            Try
                'Kopfzellen nicht formatieren
                If e.ColumnIndex = -1 Or e.RowIndex = -1 Then Exit Sub
                If MonarchDataGridview1.Columns(e.ColumnIndex).DataPropertyName = "Farbe" Then
                    e.CellStyle.BackColor = ColorTranslator.FromHtml(e.Value)
                    e.CellStyle.ForeColor = e.CellStyle.BackColor
                End If
    
            Catch ex As Exception
            End Try
        End Sub

    Montag, 28. Januar 2013 08:56

Antworten

  • Hi Monarch,

    viel Code ist es ja jetzt nicht und was die Performance angeht wird man an der Stehlle nicht viel machen können.

    Nun zu deinen Code.

    Bei der 2. Methode sollte der lehre Try/Catch Block verschwinden.

    Die Logic bei der If abfrage würde ich ändern (e.ColumIndex > -1), ist meines Erachtens leichter zu lesen, da das Exit Sub am ende, schon mal schnell überlesen wird geht.

    Das ändern der Farbe würde ich auch nicht im CellFormating Event machen. Da es jedes mal aufgerufen wird wenn sich bei irgend einer Celle das Format ändert. Und du jedes mal die Farbe setzt. Was du aber nicht so oft brauchst.

    MFG

    Björn

    Montag, 28. Januar 2013 09:47