La façon dont je me suis approché ce dans une application récente était de créer mes propres classes DataGridViewColumn et DataGridViewCell héritant hors de l'un des les existants tels que DataGridViewTextBoxColumn et DataGridViewTextBoxCell. En fonction du type de cellule que vous souhaitez, vous pouvez utiliser d'autres boutons tels que Button, Checkbox, ComboBox, etc. Jetez un coup d'œil aux types disponibles dans System.Windows.Forms. Les cellules traitent leurs valeurs en tant qu'objets de sorte que vous serez en mesure de transmettre votre classe Car dans la valeur de la cellule. Overriding SetValue et GetValue vous permettront d'avoir toute la logique supplémentaire dont vous avez besoin pour gérer la valeur.
Par exemple:
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 "";
}
}
}
Sur la classe colonne, la principale chose que vous devez faire est de définir la CellTemplate à votre classe de cellules personnalisées.
public class CarColumn : System.Windows.Forms.DataGridViewTextBoxColumn
{
public CarColumn(): base()
{
CarCell c = new CarCell();
base.CellTemplate = c;
}
}
En utilisant ces colonnes personnalisées/cellules du DataGridView il vous permet d'ajouter beaucoup de fonctionnalités à votre DataGridView. Je les ai utilisés pour modifier la mise en forme affichée en remplaçant GetFormattedValue pour appliquer une mise en forme personnalisée aux valeurs de chaîne.
J'ai également fait un remplacement sur Paint afin que je puisse faire une surbrillance de cellule personnalisée en fonction des conditions de valeur, en modifiant les cellules Style.BackColor à ce que je voulais en fonction de la valeur.
+1 Je pense que c'est une solution solide pour les objets simples – karlipoppins
Il est correct de vouloir juste une propriété, mais cela ne fonctionnera pas si vous voulez plusieurs propriétés de cet objet. –