Formatierung im Editor verhindert Spalten einfärben im DGV?

  • VB.NET
  • .NET 5–6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Formatierung im Editor verhindert Spalten einfärben im DGV?

    Hallo ihr lieben
    Ich habe mal wieder ein Problem. In meinem Programm nutze ich ein DGV, um eine in xls konvertierte Rechnung einzulesen. Dann wählt der Benutzer aus in welcher Spalte sich welche Daten befinden (Art.Nr. steht in Spalte 1, Preis steht in Spalte 5, etc.).
    Um das zu erleichtern (und weil häufig Spalteninhalt verschoben werden muss, da mein OCR Reader mehrere Seiten einer Rechnung nicht immer gleich einliest), sollen ausgewählte Spalten grau eingefärbt werden.
    Ich glaube aber meine DGV Formatierung aus dem Designer verhindert das.
    Der einfärbebefehl: DGVformatiert.Columns(Column).DefaultCellStyle.BackColor = NewColor bewirkt in meinem formatierten DGV einfach garnix.

    Um das zu veranschaulichen habe ich eine kleine Demo gebastelt. Links befindet sich ein unformatiertes DGV. Das DGV auf der rechten Seite ist exakt so formatiert, wie in meinem Programm (außer der Schriftgröße).
    Mithilfe der 3 Checkboxen werden die entsprechenden Spalten beider DGVs eingefärbt (mit dem gleichen Befehl).
    Im unformatierten DGV klappts wunderbar, im formatierten passiert nüscht.

    Woran liegt das?
    Dateien
    • DGVTest.zip

      (82,02 kB, 63 mal heruntergeladen, zuletzt: )
    "Default"CellStyle heißt: Der kommt nur, wenn nichts anderes dagegen spricht.
    Ein RowsDefaultCellStyle wäre zum Beispiel ein solcher Einwand. Den kriegst du raus, wenn du Nothing reinschreibst oder im Designer das Feld leerst.
    Gleiches gilt für die DefaultCellStyle-Eigenschaft einer DataGridViewColumn.

    Die DataGridViewCell hat auch einen echten Style. Der gewinnt gegen jeden Default.
    Das wäre sicher auch keine schlechte Sache den zu nehmen, dann kannst du den Löschen und der Default wird automatisch wieder sichtbar, anstatt dass du den Default selbst wiederherstellen musst.

    VB.NET-Quellcode

    1. Sub New()
    2. DataGridView1(0, 0).Style.BackColor = Color.Red
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. DataGridView1(0, 0).Style = Nothing
    6. End Sub

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Perfekt. Vielen Dank! :o)

    Folgender Code tut nun exakt was er soll:

    VB.NET-Quellcode

    1. Private Sub SetDGVColumnBackColor(Column As Integer, NewColor As Color)
    2. For i = 0 To DGVformatiert.Rows.Count - 1
    3. DGVformatiert(Column, i).Style.BackColor = NewColor
    4. Next
    5. End Sub


    Bzw. So sieht es dann wieder übertragen auf mein Programm aus:

    VB.NET-Quellcode

    1. Private Sub SetDGVBackColor(SPArtNr As Integer, SParticle As Integer, SPPrice As Integer, SPDiscount As Integer)
    2. Dim NewColor As Color
    3. For i = 0 To DGVRechnungskontrolle.Columns.Count - 1
    4. If i = SPPrice OrElse i = SPArtNr OrElse i = SParticle OrElse i = SPDiscount Then
    5. NewColor = Color.Gainsboro
    6. Else
    7. NewColor = Nothing
    8. End If
    9. For j = 0 To DGVRechnungskontrolle.Rows.Count - 1
    10. DGVRechnungskontrolle(i, j).Style.BackColor = NewColor
    11. Next
    12. Next
    13. End Sub

    Die übergebenen Variablen sind dabei die entsprechenden Spalten, in denen die entsprechenden Werte zu finden sind.
    Sollte eine (oder mehrere) Spalten nicht belegt sein, ändert sich ihr Wert auf -1.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    du setzst also die BackColor im Style jeder Zelle der angegebenen Spalten.
    Versuchmal, ob du nicht jeweils den DefaultStyle gleich der ganzen Column setzen kannst. Dann bräuchteste nicht alle Zellen durchzurennen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Eine Column hat keine Style Property, aber eine DefaultCellStyle Property.

    Die Frage ist, ob es einen großen Unterschied macht, denn die Column muss dann ja auch durch ihre Zellen rennen und überall den Style anpassen eben weil sie keinen separaten Style hat. Und zudem erstmal noch prüfen, ob es denn erlaubt ist wegen Default und so...