Statusbasierte Zellformatierung in .NET 2.0

Hallo,

ich habe ein DataGridView zur Anzeige von Datensätzen. Dies funktioniert mittlerweile prima. Nun ist es so, dass ich die angezeigten Daten überprüfen möchte und, falls etwas nicht stimmt, eine Zelle rot einfärben will.

Um genau zu sein: Es soll überprüft werden, ob die vom Benutzer angegebene Startklasse (Spalte "Kategorie") vereinbar mit seinem Alter ist. Gelöst habe ich es folgendermaßen:

C#:
        private void dataGrid_Registrierungen_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //Falls Alter und Kategorie nicht zusammenpassen, den Hintergrund der Zelle rot einfärben
            if (dataGrid_Registrierungen.Columns[e.ColumnIndex].Name == "Kategorie")
            {
                if (bKategorieFalsch)
                {
                    e.CellStyle.BackColor = Color.Red;
                    bKategorieFalsch = false;
                    e.FormattingApplied = true;
                }
            }
        }

Die Variable "bKategorieFalsch" wird in der Routine gesetzt, die für das Befüllen des DataTable zuständig ist (siehe folgenden Ausschnitt):

C#:
            //Daten im Grid anzeigen
            for (int i = 0; i < tableRegData.Rows.Count; i++)
            {
                DataRow tempRow = tableRegData.Rows[i];

                DataRow row = dsDaten.Tables["Table_Registrierungen"].NewRow();
                row["Name"] = tempRow["name"];
                row["Vorname"] = tempRow["vorname"];
                row["Startnummer"] = tempRow["startnummer"];
                row["Geburtsdatum"] = tempRow["geburtstag"]; //Format im Table festgelegt
                row["Geschlecht"] = tempRow["geschlecht"];
                row["Anmeldungsdatum"] = tempRow["anm_datum"]; //Format im Table festgelegt

                //Kategorie anzeigen
                strSQL = "SELECT * FROM kategorien ";
                strSQL += "WHERE kategorie_id = " + tempRow["kategorie_id"];
                tableKategorie = GetDataTable(strSQL);
                DataRow kategorieRow = tableKategorie.Rows[0]; //Nur 1 Ergebnis
                row["Kategorie"] = kategorieRow["bezeichnung"];
                
                //Kategorie richtig?
                int nCurYear = DateTime.Today.Year;
                int nGebYear = Convert.ToDateTime(tempRow["geburtstag"]).Year;
                int nKategorieAlterVon = Convert.ToInt32(kategorieRow["alter_von"]);
                int nKategorieAlterBis = Convert.ToInt32(kategorieRow["alter_bis"]);
                int nAlter = nCurYear - nGebYear;
                if (!((nAlter >= nKategorieAlterVon) && (nAlter <= nKategorieAlterBis)))
                    bKategorieFalsch = true;

                dsDaten.Tables["Table_Registrierungen"].Rows.Add(row);
                
            }

Wenn ich nur einen Datensatz habe, funktioniert alles prima. Sobald aber mehrere vorhanden sind, wird keine Zelle mehr rot eingefärbt. Beim Schrittweisen durchgehen mit dem Debugger habe ich folgende Reihenfolge der Abarbeitung festgestellt:

1. Zeile hinzufügen
2. CellFormatting-Event abarbeiten (direkt nach Rows.Add(row))
3. Zurück zu 1

Demnach müsste es ja eigentlich funktionieren. Tut es aber nicht :rolleyes:

Hat jemand eine Idee? Fehlt im Ereignis-Handler vielleicht noch eine entscheidende Zeile?
 
Zuletzt bearbeitet:
Hat sich erledigt - im Formular-Designer musste lediglich die Möglichkeit, die Zelle je nach Inhalt in ihrer Größe automatisch anzupassen (= neu zu zeichnen!), gesperrt werden. :rolleyes:
 

Neue Beiträge

Zurück