Spécial datagrid [Résolu]

poomen 117 Messages postés dimanche 2 janvier 2011Date d'inscription 25 mars 2011 Dernière intervention - 12 mars 2011 à 01:28 - Dernière réponse : cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention
- 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

Répondre au sujet
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 mars 2011 à 08:31
+3
Utile
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!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 10:14
0
Utile
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
poomen 117 Messages postés dimanche 2 janvier 2011Date d'inscription 25 mars 2011 Dernière intervention - 12 mars 2011 à 14:03
0
Utile
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
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 17:31
0
Utile
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
poomen 117 Messages postés dimanche 2 janvier 2011Date d'inscription 25 mars 2011 Dernière intervention - 12 mars 2011 à 23:01
0
Utile
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
poomen 117 Messages postés dimanche 2 janvier 2011Date d'inscription 25 mars 2011 Dernière intervention - 13 mars 2011 à 13:55
0
Utile
Merci beaucoup ; beaucoup , beaucoup ..........Robert , et encore merci !! :D
Commenter la réponse de poomen
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 mars 2011 à 16:35
0
Utile
avec plaisir ...

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.