Spécial datagrid [Résolu]

Messages postés
117
Date d'inscription
dimanche 2 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
- - Dernière réponse : cs_Robert33
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
- 13 mars 2011 à 16:35
Salut tout le monde, S'il vous plaît changer la couleur d'une Ligne de mon DATAGRIDVIEW ?? par exemple si la date est inférieur à la date system cette ligne en Rouge !!!!
Merci pour votre aide ! :D
Bonne Journée
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
3
Merci
Salut poomen

Je ne comprends pas ton probleme,
Si tu filtres des données par une requête, alors toutes les lignes doivent être rouges, donc il suffit de forcer la couleur avant le binding:
DataSet dataset=new DataSet();
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=TEST;Integrated Security=True"); 
SqlDataAdapter adap = new SqlDataAdapter();
adap.SelectCommand = new SqlCommand("SELECT TOP 3 * FROM Matériel WHERE Date_entretien >= GETDATE() ORDER BY Date_entretien;", con); 
adap.Fill(dataset);
dataGridView1.DefaultCellStyle.BackColor = Color.Red;// ici on force la couleur par défaut pour toutes les lignes
dataGridView1.DataSource = dataset.Tables[0]; 


Maintenant si ta requête ne filtre pas, alors tu dois mettre la couleur sur certaines lignes

variable au niveau de la class
int ColumnToCheck = -1; 

quelque part au niveau de l'initialisation, ou via le designer
this.dataGridView1.RowPrePaint += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(this.dataGridView1_RowPrePaint);


procedure de chargement de la datagridview, la requête prend toutes les lignes
on mémorise le colonne à tester lors de l'affichage
// 
DataSet dataset=new DataSet();
SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=TEST;Integrated Security=True"); 
SqlDataAdapter adap = new SqlDataAdapter();
adap.SelectCommand = new SqlCommand("SELECT * FROM Matériel ORDER BY Date_entretien;", con); 
adap.Fill(dataset);
ColumnToCheck = dataset.Tables[0].Columns.IndexOf("Date_entretien"); // on recherche l'index de la colonne à tester
dataGridView1.DataSource = dataset.Tables[0]; 



procedure de pre paint d'une ligne,
pour chaque ligne on teste la valeur de la colonne
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (ColumnToCheck !=-1 && dataGridView1.Rows[e.RowIndex].Cells[ColumnToCheck].Value != null)
if ((DateTime)dataGridView1.Rows[e.RowIndex].Cells[ColumnToCheck].Value >= DateTime.Now.Date) 
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
else
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}

Bob.
C# is amazing, enjoy it!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Salut

Tu dois pouvoir changer le backcolor de la ligne
ex:
 dataGridView1.Rows[RowIndex].DefaultCellStyle.BackColor = Color.Aquamarine;



Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
117
Date d'inscription
dimanche 2 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
0
Merci
ahh , merci pour ta réponse , mais on peut pas savoir la ligne , elle changer en faisant un tri , ce que j'aimerai c'est une astuce pour faire ca , parceque je travaille en ado.net , c # , par exemple , faier la requete dans une variable , avec la condition , la ligne pourra changer de couleur....!!! :D
Commenter la réponse de poomen
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Sur l'evenement RowPrePaint, tu testes ta condition sur la ligne en cours et tu bascules la couleur

Ex:
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    if (dataGridView1.Rows[e.RowIndex].Cells[0].Value != null)
        if ((int)dataGridView1.Rows[e.RowIndex].Cells[0].Value % 2 == 0)
            dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LavenderBlush;
        else if ((int)dataGridView1.Rows[e.RowIndex].Cells[0].Value % 3 == 0)
            dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Lavender;
        else
            dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
117
Date d'inscription
dimanche 2 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
0
Merci
Merci pour ta réponse l'ami...j'ai essayé de comprendre , mais....je te reéxplique j'affliche mes donner dans le datagrid , et je veux que si ma date exam est supérieur ou égal a la date system , ces ligne deviennet en rouge , j'ai essayé de faire la requete mais pour la couleur , j'ai échoué , bon voila mon code
SqlConnection con = new SqlConnection("Data Source=BENDDANE-PC\\SQLEXPRESS;Initial Catalog=GESTION_MATERIEL.MDF;Integrated Security=True");
SqlDataAdapter adap = new SqlDataAdapter();
adap.SelectCommand = new SqlCommand("SELECT TOP 3 * FROM Matériel WHERE Date_entretien >= GETDATE() ORDER BY Date_entretien;", Program.con);
adap.Fill(x);
dataGridView1.DataSource = x.Tables[0];
(et lààà les 3 ligne doivent etre en rouge)
//dataGridView1.DefaultCellStyle.BackColor = Color.rouge;
Merci de vouloir m'aider !! :D
Commenter la réponse de poomen
Messages postés
117
Date d'inscription
dimanche 2 janvier 2011
Statut
Membre
Dernière intervention
25 mars 2011
0
Merci
Merci beaucoup ; beaucoup , beaucoup ..........Robert , et encore merci !! :D
Commenter la réponse de poomen
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
avec plaisir ...

Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33