La forma en que me acercaba a esto en una aplicación reciente fue la de crear mis propias clases DataGridViewColumn y DataGridViewCell heredar fuera de una de las existentes como DataGridViewTextBoxColumn y DataGridViewTextBoxCell.
Dependiendo del tipo de celular que desee, puede usar otros como Button, Checkbox, ComboBox, etc. Simplemente eche un vistazo a los tipos disponibles en System.Windows.Forms.
Las celdas tratan con su valor como objetos, por lo que podrá pasar su clase de Auto al valor de la celda.
Reemplazando SetValue y GetValue le permitirá tener cualquier lógica adicional que necesite para manejar el valor.
Por ejemplo:
public class CarCell : System.Windows.Forms.DataGridViewTextBoxCell
{
protected override object GetValue(int rowIndex)
{
Car car = base.GetValue(rowIndex) as Car;
if (car != null)
{
return car.Maker.Name;
}
else
{
return "";
}
}
}
En la clase de la columna de la cosa principal que hay que hacer es establecer la CellTemplate a su clase de celda personalizado.
public class CarColumn : System.Windows.Forms.DataGridViewTextBoxColumn
{
public CarColumn(): base()
{
CarCell c = new CarCell();
base.CellTemplate = c;
}
}
Mediante el uso de estos columna personalizada/Células en el DataGridView que le permite añadir una gran cantidad de funcionalidad adicional a su DataGridView.
Los usé para alterar el formato mostrado anulando GetFormattedValue para aplicar formato personalizado a los valores de cadena.
También hice una anulación en Paint para poder hacer resaltado de celda personalizado dependiendo de las condiciones de valor, alterando las celdas Style.BackColor a lo que quería según el valor.
+1 Creo que esta es una solución sólida para objetos simples – karlipoppins
Está bien con solo querer una propiedad, pero no funcionará con las múltiples propiedades de ese objeto. –