Laden...

DataGridView + Formatierung

Erstellt von Andreas@Tricept vor 16 Jahren Letzter Beitrag vor 16 Jahren 896 Views
A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 16 Jahren
DataGridView + Formatierung

Hallo,
ich benutze eine datengebunde DataGridView.
Wenn ich einstellungen an dem Style vornehme also zB. ich ändere den Hintergrund einer Zeile, so werden diese einstellungen verworfen wenn ich die DataGridView sortiere. Wie kann ich dem vorbeugen?

432 Beiträge seit 2005
vor 16 Jahren

hi andreas,

Du musst das RowPrePaint-Ereignis verwenden.

Normalerweise musst Du dir ein Kriterium (=Feldinhalt) merken, um die Zeile zu identifizieren, die Du farblich hinterlegen möchtest.

Wir haben bei uns etwas ähnliches gemacht: der Benutzer kann Zeilen markieren.
Wir merken uns dann den Wert des Primärschlüssels (RecordID = Guid) in einer Liste.

Im RowPrePaint-Ereignis wird nachgesehen, ob der Wert der RecordID-Spalte in der Liste enthalten ist und die Hintergrundfarbe ggf. geändert.

Klingt langsam und aufwendig, ist aber pfeilschnell 😉

Anbei beispielhaft und vereinfacht unser RowPrePaint-Ereignis:


private List<Guid>      highlightedItems;
private Color HighlightBackColor = Color.Green;
private Color HighlightForeColor = Color.White;

protected virtual void Internal_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{/*Handle row highlighting*/

// If row contains the row guid field...
   Guid guid = Guid.Empty;
   try
      { guid = (Guid)Rows[e.RowIndex].Cells["RecordID"].Value; }
   catch { }

// check if row is in highlight list
   if ((guid != Guid.Empty) && (highlightedItems.Contains(guid)))
   {
      Rows[e.RowIndex].DefaultCellStyle.BackColor = HighlightBackColor;
      Rows[e.RowIndex].DefaultCellStyle.ForeColor = HighlightForeColor;
   }
}


hth
ron

A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 16 Jahren

Sowas habe ich leider befürchtet. Finde es nur seltsam das eine datengebundene Tabelle bei jeder änderung der Collection all ihre Zeilen entfernt und neu erstellt.

Vielen Dank für den Ansatz, daran werde ich mich halten.