La modification d'un datagridview ligne de couleur au moment de l'exécution
Je suis hériter du contrôle DataGridView pour un contrôle, je suis en développement.
Mon objectif est de faire de chaque ligne de couleur représentant un État de l'objet qui peut changer lors de l'exécution.
Mon objet implémente l'Observables modèle de conception.
J'ai donc décidé de développer ma propre DataGridViewRow de classe, la mise en œuvre du pattern observer et de faire de mon rang observer l'objet.
Dans cette classe, j'ai cette méthode :
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[state];
DefaultCellStyle.ForeColor = m_ETForeColors[state];
}
Je ne peux pas observer mon objet pour le moment, donc, pour tester le changement de couleur, je l'appelle mon UpdateColors méthode sur des lignes sélectionnées sur l'événement SelectionChanged.
Et c'est maintenant le moment il ne fonctionne pas!
Ma précédemment sélectionné lignes séjour bleu (comme quand ils ont été sélectionnés), les cellules, les textes sont en couches quand je scroll.
J'ai essayé d'appeler DataGridView.Refresh(), mais cela ne fonctionne pas non plus.
Je dois ajouter mon datagridview n'est pas lié à une source de données : je ne sais pas combien de colonnes que j'ai avant l'exécution, j'ai donc le nourrir à la main.
Quelqu'un peut-il me dire ce que je fais mal?
========== Mise à jour ==========
Cela fonctionne :
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = System.Drawing.Color.Yellow;
DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
}
Mais cela ne fonctionne pas :
public void UpdateColors(int state)
{
DefaultCellStyle.BackColor = m_ETBackColors[nEtattech];
DefaultCellStyle.ForeColor = m_ETForeColors[nEtattech];
}
avec :
System.Drawing.Color[] m_ETBackColors = new System.Drawing.Color[] { };
System.Drawing.Color[] m_ETForeColors = new System.Drawing.Color[] { };
Il n'y a pas de débordement de tableau : ils sont les paramètres du constructeur.
Vous devez vous connecter pour publier un commentaire.
Ok, trouvé l'erreur.
Les couleurs que j'utilise ont été créés comme ça :
La mauvaise chose est que la valeur est un nombre entier représentant une couleur avec alpha à 0.
Grâce à ce post : MSDN social post, j'ai appris que les styles de cellule ne prennent pas en charge les couleurs ARGB, à moins que l'alpha est fixé à 255 (ils prennent uniquement en charge les couleurs RVB).
J'ai donc fini à l'aide de ce qui fonctionne, mais il y a sûrement une façon plus élégante :
utilisation
CellFormatting
événement pour le faire:private void DataGridViewEtat_Technique_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) { DataGridViewTechnicalStateRow row = Rows[e.RowIndex] as DataGridViewTechnicalStateRow; row.DefaultCellStyle.BackColor = row.BCL; row.DefaultCellStyle.ForeColor= row.FCL; }