Que frustrante. Parece ser que Visual Studio no contempla la herencia visual en algunos de los controles del propio .NetFramework, entre ellos el DataGridView. En artículos anteriores había comentado comportamientos anómalos en el control MonthCalendar, pero esto... esto me supera.
Concretamente el problema aparece en tiempo de diseño. Para entenderlo de una manera sencilla, podemos hacer un ejercicio rápido:
- Abrimos un Proyecto de Windows Forms.
- Creamos un formulario padre que contenga un control DataGridView.
- Modificamos la propiedad 'Modifiers' del DataGridView a valor 'Protected'. De esta manera cualquier formulario que herede de este formulario-padre podrá acceder a las propiedades del control DataGridView (o no?)

- Creamos un formulario-hijo que herede de formulario-padre.
- Sorpresas te da la vida:

¿Qué significa este candado? ¿Por qué las propiedades están deshabilitadas? Pues resulta que desde la versión 2.0 del .NetFramework existen controles que tienen deshabilitada la herencia visual y por tanto no pueden modificarse en 'design time'. Hay muchas quejas al respecto aquí, aquí, aquí, aquí y aquí. Y además está reportado a Microsoft aquí, aquí, aquí, aquí y vete a saber donde más.
Vale, si, se puede acceder a las propiedades mediante código, al fin y al cabo todos somos programadores. Pero si alguien lo quiere probar, verá que acceder a los eventos no es tan sencillo, directamente no se puede! ni por código! la única manera que he encontrado es publicando los eventos en el formulario padre y haciendo un override en el formulario hijo, y ya empezamos con las chapuzas. Además, la edición de las columnas hay que hacerla manualmente y no se ve el aspecto final del DataGridView hasta que no ejecutamos la aplicación. Y por si todo esto fuera poco, el comportamiento del control es extremadamente absurdo, empieza a crear y crear columnas repetidas. En fin, un infierno. Asi que mi consejo del día es:
NO HEREDEIS NUNCA UN CONTROL DATAGRIDVIEW.
Este artículo lo he escrito porque justamente tengo un proyecto entre manos de desarrollo de una aplicación con aproximadamente 60 formularios con un DataGridView idéntico. La solución ideal sería crear un formulario padre con un DataGridView y los 60 formularios que hereden de este formulario padre. Pero visto lo visto, tendré que ir formulario por formulario copypasteando el DataGridView en cada uno de ellos (y justamente esto no son las mejores prácticas).
Será la versión 2010 la que solucione estos problemas? Nos vemos!