Auslesen von DataGridView CellStyleFont klappt nicht

  • VB.NET

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

    Auslesen von DataGridView CellStyleFont klappt nicht

    Hallo zusammen,
    ich habe auf meiner Form ein DatagridView namens DGV. Das habe ich via Eigenschaften sozusagen manuell formatiert, und zwar die CellDefault- Eigenschaften (BackColor, ForeColor und Font.
    Jetzt lese ich in meinem Programm eine Zeile des DGV eine Zeile Dim dr asDatGridViewRow ein mit dr = DGV.Rows(i) (i ist eine Laufvariable für die Zeilen des DGV).
    Dann folgender Code im Programm:

    Quellcode

    1. With dr
    2. Dim cellText as String = .Cells(0).Value
    3. Dim cellBG as Color= .Cells(0).Style.BackColor
    4. Dim cellFO as Color = .Cells(0).Style.ForeColor
    5. Dim cellFont as Font = .Cells(0).Style.Font
    6. End With

    0 ist die erste Zelle der Zeile.
    Da habe ich folgenden Fall: cellFont ergibt immer Nothing, obwohl die Eigenschaft für die Zelle gesetzt ist (Arial, 12, Regular
    Woran kann das liegen?

    Grüße - Dietrich

    dherr schrieb:

    Das habe ich via Eigenschaften sozusagen manuell formatiert
    Meinst über den Designer?

    dherr schrieb:

    die CellDefault- Eigenschaften
    Da denke meinst du die DefaultCellStyle-Eigenschaften.
    Und da liegt der Hund begraben.

    DataGridViewCell hat einen Style und das DataGridView hat einen DefaultCellStyle. Der DefaultCellStyle greift, wenn die Cell nicht selbst einen Style gesetzt hat.
    Im Designer kannst du nur einen DefaultCellStyle angeben.
    Deswegen ist DataGridViewCell.Style Nothing, weil du den nirgendwo im Code definiert hast.
    Allerdings sollte dann nicht nur der Font Nothing sein, der Rest auch.
    Ah ich seh gerade der Style ist generell auf irgendeinen "leeren" Zustand gesetzt. Da ist der Font nicht gesetzt, die Color Werte sind vorhanden, aber 0.

    Was du willst ist vermutlich

    VB.NET-Quellcode

    1. With dr
    2. Dim cellText as String = .Cells(0).Value
    3. End With
    4. Dim cellBG as Color= DGV.DefaultCellStyle.BackColor
    5. Dim cellFO as Color = DGV.DefaultCellStyle.ForeColor
    6. Dim cellFont as Font = DGV.DefaulCellStyle.Font

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

    @dherr Poste mal so viel Code mit (Demo-)Daten, dass wir ihn compilieren können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    dherr schrieb:

    cellFont ergibt immer Nothing, obwohl die Eigenschaft für die Zelle gesetzt ist (Arial, 12, Regular
    Vermutlich eben doch nicht.
    Vielleicht hast du den Column.DefaultCellStyle.Font gesetzt, aber den Cell.Style.Font wohl nicht.
    Es ist auch nicht empfehlenswert, bei jeder einzelnen dgv-Cell am Style rumzufummeln.
    Versuch lieber auf andere Weise herauszufinden, wo der Font herkommt, der in der Cell wirksam wird:
    Wird er vom DGV geerbt? oder durch einen DataGridview.DefaultCellStyle gesetzt? oder durch einen DataGridviewColumn.DefaultCellStyle gesetzt? oder durch ein RowTemplate?

    Ich muss zugeben, ich blick da atm auch nicht genau durch, müsste ich erst bisserl rumprobieren, um das System dahinter zu verstehen.
    @dherr
    probier das Abrufen des Styles einmal z.B. so:

    VB.NET-Quellcode

    1. DGV.Columns(ColumnIndex).DefaultCellStyle.BackColor
    2. 'oder besser noch:
    3. DGV.Cells(x).InheritedStyle.BackColor
    So werden deine Einstellungen, die du im Designer gemacht hast, ausgespuckt...
    Wenn Empty dann:

    VB.NET-Quellcode

    1. DGV.DefaultCellStyle...

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VB1963“ ()

    Hallo! Vielen Dank an alle Hinweis- und Tippgeber!
    Mittlerweile habe ich es gelöst.
    Ich habe via Designer für die Columns die DataGridViewCellStyle - Font Eigenschaft gesetzt.
    Dann kann ich für die Zellen der Spalte den Font mittels folgendem Code erhalten:

    Quellcode

    1. Dim cellText As String, cellBG, cellFO As Color, cellFont As Font
    2. With dr
    3. cellText = .Cells(j).Value
    4. cellBG = .Cells(j).Style.BackColor
    5. cellFO = .Cells(j).Style.ForeColor
    6. cellFont = theDGVsrc.Columns(.Cells(j).ColumnIndex).DefaultCellStyle.Font
    7. End With

    Setzt allerdings voraus, dass die entsprechende Spalte einheitlichen Font zugewiesen bekommt.

    GRüße - Dietrich