La liaison à DataGridView - Est-il possible de “lier” la couleur d'arrière-plan d'une cellule?
Je suis de la liaison d'une Liste à un DataGridView. Une propriété de la SomeObject classe sera un code d'état (ex. Rouge, Jaune, Vert). Puis-je "lier" le statut de la couleur de fond d'une cellule facilement? Comment sur la liaison d'une info-bulle aussi?
- J'espère vraiment que vous obtenez une réponse à cela, et que c'est possible, j'ai été incapable de comprendre cela, j'ai défini la couleur d'arrière-plan après la liaison de données en modifiant chaque style de cellule. Malheureusement, c'est vraiment très lent 🙁 datagridview1.Les lignes[1].Les cellules[2].Style.BackColor = Color.Rouge
Vous devez vous connecter pour publier un commentaire.
Vous pouvez écrire un gestionnaire pour le DataGridView est CellFormatting événement pour personnaliser la couleur du fond. Voici un exemple (vous aurez besoin d'avoir traîné un DataGridView sur le Formulaire par défaut puis double-cliqué sur le CellFormatting événement pour créer un gestionnaire d'):
Ici, les objets ont juste un Statut et un Texte pour des raisons de simplicité. J'ai créer un BindingSource pour un exemple de ces objets, puis de l'utiliser comme source de données pour le DataGridView. Par défaut, la grille génère automatiquement des colonnes lorsque vous liez, donc il n'y a pas besoin de le faire manuellement. J'ai aussi masquer la première colonne, qui est lié à la valeur de la condition, comme nous allons le la couleur du Texte des cellules de la place.
Pour réellement faire de la peinture, nous répondons à la CellFormatting événement. Nous obtenons une référence à la DataGridView par la coulée de l'expéditeur, puis utilisez le RowIndex propriété de la DataGridViewCellFormattingEventArgs objet pour obtenir à l'élément de données iteself (chaque Ligne a un DataBoundItem propriété idéalement nous donne cette). Comme DataBoundItem est un type d'objet, nous avons besoin de la lancer à notre type spécifique, alors on peut effectivement arriver à l'État de la propriété elle-même...ouf!
Je n'ai pas eu d'expérience avec les info-bulle de la programmation, mais j'aurais pensé que vous devriez répondre à l'événement MouseHover, puis de travailler sur la découverte de la ligne qui est en cours pointé pour commencer.
J'espère que cette aide.
Hors de la boîte, tout DataGridViewColumn peut être lié à une seule propriété des objets dans la source de données, le nom de la propriété par le DataPropertyName de chaque DataGridViewColumn (vous aurez colonne spécifique des types comme: DataGridViewTextBoxColumn, ...).
Vous pouvez utiliser le DataGridView.CellFormatting événement pour modifier le style de la cellule en fonction de l'élément lié aux données. Dans le dans le DataGridViewCellFormattingEventArgs de cet événement, vous obtenez l'index de ligne, à partir de là, vous pouvez obtenir l'objet courant (la source de la ligne). À partir de là, vous pouvez utiliser n'importe quelle propriété de l'objet à l'influence de votre cellule.
Un bon point de départ (de la même idée): ici
Une deuxième idée serait de faire développer votre propre DataGridViewColumn type et ajouter des propriétés pour d'autres choses que vous besoin de se lier à. Par exemple, de la même manière qu'il a construit dans le DataPropertyName, vous pouvez ajouter votre propre: BackgroundColorPropertyName. Un point de départ pour la réalisation sur mesure de DataGridViewColumns peut être trouvé ici.