Hintergrundfarbe einer DataGridView ändern

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hintergrundfarbe einer DataGridView ändern

    Hi,

    ich verwende eine DataGridView "dgvFiles".

    Nun möchte ich unter bestimmten Bedingungen die Hintergrundfarbe meiner DataGridView ändern. Ich habe folgendes kodiert:

    VB.NET-Quellcode

    1. dgvFiles.BackgroundColor = myColor
    2. dgvFiles.BackColor = myColor


    Die Hintergrundfarbe wird damit zwar geändert. Aber leider nur für den "freien" Bereich der DataGridView. Der Hintergrund der angezeigten Zellen bleibt unverändert.

    Ich habe im Netz gesucht aber nix gefunden, wie man den Hintergrund ALLER angezeigten Zellen abändern kann. Oder muss man das zeilenweise und spaltenweise abhandeln?

    Na, ich bin sicher ihr wisst wie man das am geschicktesten macht!

    LG
    Peter
    Ist soweit logisch, immerhin färbst du das DataGridView ein, ändere doch mal die Hintergrundfarbe der Rows ;)
    Es geht auch einfach, wenn du im Designer direkt die Eigenschaft DefaultCellStyle des DGV änderst und dort eine Hindergrundfarbe beim ersten Punkt auswählst!!
    Achtung: AlternatingRowsDefaultCellStyle darf nicht geändert werden, sonst wird jede zweite Zeile anders behandelt, meinetwegen blau hinterlegt obwohl du rosa ausgewählt hast oder so. (Hab noch keine Möglichkeit gefunden, das wieder auf Default zu setzen. Also, wenn du die Eigenschaft schon geändert hast, dann einfach ein neues DGV nehmen!) ;)

    GLG,
    Noyne
    Your computer is running... You better go chase it! :P :D

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Noyne“ ()

    @Noyne Jou.

    Peter329 schrieb:

    Der Hintergrund der angezeigten Zellen bleibt unverändert.
    Du kannst beliebig die Eigenschaften einer Zelle ändern:

    VB.NET-Quellcode

    1. style = DataGridView1.Rows.Item(i).Cells.Item(0).Style
    2. style.ForeColor = Color.Blue
    3. style.Font = New Font(MyFont, MyFont.Style Or FontStyle.Bold)
    4. DataGridView1.Rows.Item(i).Cells.Item(1).Style = style
    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!
    Also erst mal vielen Dank für die Antworten.

    Ist soweit logisch, immerhin färbst du das DataGridView ein, ändere doch mal die Hintergrundfarbe der Rows


    Das würde ich ja sehr gerne machen, wenn ich wüsste wie das geht. Eine Eigenschaft etwa der Art "dgvFiles.Row.BackgroundColor" suche ich vergeblich.

    Es geht auch einfach, wenn du im Designer direkt die Eigenschaft DefaultCellStyle des DGV änderst und dort eine Hindergrundfarbe beim ersten Punkt auswählst!!


    Der Designer hilft mir leider nicht weiter, weil ich die Farbe von bestimmten Bedingungen abhängig, also programmgesteuert ändern möchte (s. mein obiges Posting).

    Du kannst beliebig die Eigenschaften einer Zelle ändern:


    Leider komme ich mit deinem Vorschlag diesmal nicht zurecht.

    Ich hab das wie folgt versucht (erst mal nur für eine Zelle):

    VB.NET-Quellcode

    1. style = dgvFiles.Rows.Item(0).Cells.Item(0).Style
    2. style.ForeColor = Color.Blue
    3. style.Font = New Font(MyFont, MyFont.Style Or FontStyle.Bold)
    4. dgvFiles.Rows.Item(0).Cells.Item(0).Style = style


    Das beschert mir dann eine Reihe von Compiler Meldungen der folgenden Art:

    Fehler 1 "style" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

    Fehler 4 "MyFont" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

    Da fehlen also zwei Delares. Aber die kriege ich irgendwie nicht hin.

    mhh ... sorry ... aber ich muss eure Geduld diesmal ein wenig strapzieren! :)

    LG
    Peter

    Peter329 schrieb:

    Meldungen der folgenden Art:
    :rolleyes:

    VB.NET-Quellcode

    1. Dim style As System.Windows.Forms.DataGridViewCellStyle
    2. Dim MyFont As Font = DataGridView1.Font ' z.B.

    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!
    na, nach diesem Wink mit dem Zaunpfahl funktioniert mein Programm. :)

    Offensichtlich kann man die Sache also nur zellenweise abwickeln. Für den Fall, dass sonst noch jemand so etwas sucht, stelle ich das Coding hier mal ein:

    VB.NET-Quellcode

    1. If TextSearch.Text = "" Then
    2. dgvFiles.BackgroundColor = SystemColors.Window
    3. Else
    4. dgvFiles.BackgroundColor = SearchmodeColor
    5. Dim style As System.Windows.Forms.DataGridViewCellStyle
    6. For ix As Integer = 0 To dgvFiles.Rows.Count() - 1
    7. For jx As Integer = 0 To 2
    8. style = dgvFiles.Rows.Item(ix).Cells.Item(jx).Style
    9. style.BackColor = SearchmodeColor
    10. dgvFiles.Rows.Item(ix).Cells.Item(jx).Style = style
    11. Next
    12. Next
    13. End If


    Abhängig davon, ob die TextBox "TextSearch" einen Inhalt hat, wird die DataGridView "dgvFiles" eingefärbt. Vielleicht brauchts ja sonst noch jemand. :)

    Ganz herzlichen Dank an die Ratgeber!

    LG
    Peter
    Mit Option Infer On kannst Du diese Zeile weglassen:

    Peter329 schrieb:

    VB.NET-Quellcode

    1. Dim style As System.Windows.Forms.DataGridViewCellStyle
    und machst aus dieser

    Peter329 schrieb:

    VB.NET-Quellcode

    1. style = dgvFiles.Rows.Item(ix).Cells.Item(jx).Style
    diese:

    VB.NET-Quellcode

    1. Dim style = dgvFiles.Rows.Item(ix).Cells.Item(jx).Style
    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!
    natürlich kann man das für alle Zellen einstellen, das macht man sogar im Designer.
    Den DefaultCellStyle des DGVs.
    Oder den RowDefaultCellStyle.
    Oder RowTemplate.DefaultCellStyle.

    Und für jede Spalte gibts auch nochmal einen CellStyle.
    Und natürlich jede Zelle einzeln auch.

    Das ist sone Hierarchie, also die kleinräumigeren Festlegungen schattieren übergeordnete Festlegungen ab.

    Jedenfalls keinen Code schreiben dafür, sondern lernen, mittm Designer richtig umzugehen.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Klingt ja sehr gut ... nur ein bissl präziser müsste es dann schon sein, damit ich das auch umsetzen kann. Zumal ich ja insbesondere dank RFG eine gut funktionierende Lösung habe .... :)

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

    ja, wie: präziser: Soll ich dir ein Video machen, dass du sehen kannst, wie man diese Dinge im Eigenschaftenfenster des DGVs einstellt?
    Ich kann mich in diesem Fall nicht präziser ausdrücken - du müsstest dir doch schonmal die Mühe machen, ein DGV aufs Form zu tun, und dann im Eigenschaftenfenster des FormDesigners die genannten Properties aufsuchen.
    Och nö, bitte kein Video. Ich kann Erklärungen meist sehr gut folgen, wenn sie denn nachvollziehbar sind.

    Also, dann will ich jetzt mal meinen Beitrag den neuesten Erkenntnissen anpassen.

    1. Man kann die Einfärbung doch GLOBAL und nicht nur zellenweise vornehmen.

    2. Man braucht dazu KEINE Einstellungen im Designer.

    Das nachfolgende Coding tut das was ich erreichen wollte. Und damit sollte das Thema dann m.E. final abgehandelt sein.

    VB.NET-Quellcode

    1. If TextSearch.Text = "" Then
    2. dgvFiles.BackgroundColor = SystemColors.Window 'color empty area
    3. dgvFiles.DefaultCellStyle.BackColor = SystemColors.Window 'color cell area
    4. Else
    5. dgvFiles.BackgroundColor = SearchmodeColor
    6. dgvFiles.DefaultCellStyle.BackColor = SearchmodeColor
    7. End If


    Herzlichen Dank für die Ratschläge!

    LG
    Peter

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

    Entgegen anderslautender Meinungen braucht man dazu KEINE Einstellungen im Designer.
    Brauchen tut mans nicht.
    Es ist ein Vorteil, dass man diese Einstellung im Designer tätigen kann.
    Je weniger Konfigurations-Code man in seinen Code-Dateien zu stehen hat, desto klarer tritt dort die eigentliche Logik des Programms hervor.
    Das mit den "anderslautenden Meinungen" hatte ich ja gerade deshalb weg editiert, um solche Diskussionen zu vermeiden. Aber das war wohl zu spät ... :)

    Und wie tätigt man jetzt deiner Meinung nach im DESIGNER die Einstellung des farblichen Hintergrundes einer Datagrid View in Abhängigkeit vom Inhalt eines Textfeldes der Form?