2017-01-16 2 views
1

Ich habe einige benutzerdefinierte DataGridViewTextBoxCell Instanzen. In den meisten von ihnen setze ich benutzerdefinierte ForeColor Werte und das funktioniert gut. Aber wenn die SelectionModeFullRowSelect ist, überschreibt es meine ForeColor Werte für diese Zelle.DataGridView benutzerdefinierte Zelle sollte normale ForeColor verwenden, wenn ausgewählt

Ich habe versucht, es im Draw-Ereignis zu setzen, wenn die Zelle ausgewählt ist, aber es funktioniert nicht.

Meine Zelle ist wie folgt definiert.

public class CustomCell : DataGridViewTextBoxCell 
{ 
    protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context) 
    { 
     if (string.IsNullOrEmpty(value.ToString())) 
     { 
      return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context); 
     } 

     if (value.ToString().Contains("test")) 
     { 
      cellStyle.ForeColor = Color.Blue; 
     } 
     return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context); 
    } 
} 

Ich will nicht den Auswahlmodus ändern, aber ich möchte diese Zelle zeigen, mit dem rechten ForeColor aber die Auswahl BackColor.

Wie könnte die Lösung dafür aussehen?

Antwort

1

Sie können Paint Methode der Zelle außer Kraft setzen und setzen cellStyle.SelectionForeColor auf die gleiche Farbe von ForeColor:

protected override void Paint(Graphics graphics, Rectangle clipBounds, 
    Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, 
    object value, object formattedValue, 
    string errorText, DataGridViewCellStyle cellStyle, 
    DataGridViewAdvancedBorderStyle advancedBorderStyle, 
    DataGridViewPaintParts paintParts) 
{ 
    if (string.Format("{0}", formattedValue) == "something") 
    { 
     cellStyle.ForeColor = Color.Red; 
     cellStyle.SelectionForeColor = cellStyle.ForeColor; 
    } 
    base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, 
     formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); 
} 

Hinweis: Sie können das gleiche mit CellFormatting oder CellPainting Fall DataGridView tun, ohne eine eigene Zelle zu schaffen.

+0

Danke, es funktioniert. Ich weiß, dass ich die Ereignisse benutzen kann. Aber ich habe eine Menge Zellen im ganzen Programm, die auf die gleiche Weise mit einigen wirklich speziellen Regeln aussehen sollten. Also war es schöner, benutzerdefinierte Zellen dafür zu machen. – Booser

+0

Sie kennen die Anforderungen besser, ich teilte es nur zu Ihrer Information oder für zukünftige Leser :) –

Verwandte Themen