I have a custom DataGridView
, let\'s say as such:
public MyGridView : DataGridView
{
public MyGridView()
{
BackgroundColor = Co
I should emphasize that this isn't normally the way you do this, the [DefaultValue]
attribute is normally the correct choice. But you are working with a property of type Color, it is not simple to write the attribute for that in a flexible way. The arguments you can pass to an attribute constructor can be only a select few data types, Color isn't one of them. You'd have to craft a string that ColorConverter can understand, that's both ugly and hard to maintain.
PropertyGrid has a secondary way of providing defaults for "difficult" properties, it will also look for specially named private members in the class. Given a property named "Xxxx", it looks for the following:
Which makes this code work:
public class MyGridView : DataGridView {
public MyGridView() {
this.BackgroundColor = DefaultBackgroundColor;
}
public new Color BackgroundColor {
get { return base.BackgroundColor; }
set { base.BackgroundColor = value; }
}
private bool ShouldSerializeBackgroundColor() {
return !this.BackgroundColor.Equals(DefaultBackgroundColor);
}
private void ResetBackgroundColor() {
this.BackgroundColor = DefaultBackgroundColor;
}
private static Color DefaultBackgroundColor {
get { return Color.Red; }
}
}
Note that the ResetBackgroundColor() method is not actually necessary since no special effects are required when the user resets the property, I just included it for completeness.
Try using InitLayout instead and DesignMode. You can't use DesignMode in the ctor, but after the control is constructed you can access the Designmode property correctly to set the colour. Note: this will not be styled in the designer, just at run time.
public class MyGridView : DataGridView
{
protected override void InitLayout()
{
base.InitLayout();
if (!DesignMode)
BackgroundColor = Color.Red;
}
}
If needs are simple and design appearance is no issue, try writing an extension or two, e.g.,
public static class Extensions
{
public static void ApplyStyle( this DataGridView dataGridView )
{
dataGridView.RowHeadersVisible = false;
...
}
}
There is a simpler way to assign DefaultValue to Color:
public class MyGridView : DataGridView
{
public MyGridView()
{
BackgroundColor = Color.Red;
}
[DefaultValue(typeof(Color), "Red")]
public new Color BackgroundColor
{
get { return base.BackgroundColor; }
set { base.BackgroundColor = value; }
}
}