Bonjour,
Je cherche à changer la couleur d'une cellule d'un DataGrid qui est créé dynamiquement par code.
Si je le crée dynamiquement c'est parce que le nombre de colonne est variable.
Le dataGrid doit permettre de visualiser les données venant de deux tables différentes. Ce sont les données d'un agenda de formation et le client veut pouvoir voir les info sur les participants sur les deux premières colonnes et les colonnes suivantes sont les dates de formation qui contiendront l'information présent / absent.
J'ai donc le code suivant pour créer la table et lier l'info :
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Public Sub ChargeInfo() DataGridPresence.SelectionUnit = DataGridSelectionUnit.Cell DataGridPresence.Columns.Clear() DataGridPresence.AutoGenerateColumns = False DataGridPresence.ColumnWidth = DataGridLength.Auto tableAffiche = New DataTable tableAffiche.Columns.Add("Usager", GetType(System.String)) tableAffiche.Columns.Add("Dossier", GetType(System.String)) tableAffiche.Columns.Add("NI", GetType(System.Int32)) Dim col = New DataGridTextColumn() col.Header = NOM_COL_USAGER col.Binding = New Binding(NOM_COL_USAGER) DataGridPresence.Columns.Add(col) col = New DataGridTextColumn() col.Header = NOM_COL_DOSSIER col.Binding = New Binding(NOM_COL_DOSSIER) DataGridPresence.Columns.Add(col) For Each rowSeance In _elementBAEFOR.donnéeBAESEF.table.Rows Dim elemBAESEF As ClassElementBAESEF = _elementBAEFOR.donnéeBAESEF.getElement(rowSeance) Dim nomCol As String = elemBAESEF.pD_ID_séance_formation '.date400ToDate.ToShortDateString tableAffiche.Columns.Add(nomCol, GetType(System.String)) Dim col1 = New DataGridTextColumn col1.Binding = New Binding(nomCol) If Not elemBAESEF.pD_Code_delete = "" Then col1.Header = "[SUPPRIMEE]" & vbCrLf End If col1.Header &= "Séance du " & vbCrLf & elemBAESEF.pD_Date_séance_formation.date400ToDate.ToString("dddd") & vbCrLf & elemBAESEF.pD_Date_séance_formation.date400ToDate.ToShortDateString & vbCrLf & "n°" & elemBAESEF.pD_ID_séance_formation DataGridPresence.Columns.Add(col1) For Each rowPat In elemBAESEF.donneeBAEPAF.getParticipant(elemBAESEF.pD_ID_séance_formation) Dim elemBAEPAF As ClassElementBAEPAF = elemBAESEF.donneeBAEPAF.getElement(rowPat) ' Recherche existe dans table : Dim strDossier As String = elemBAEPAF.NumDosFam.Trim & "/" & elemBAEPAF.pD_Dossier_suffixe Dim tabRow As DataRow() = tableAffiche.Select(NOM_COL_DOSSIER & " = '" & strDossier & "'") Dim RowTableAfficheUsager As DataRow If tabRow.Length = 0 Then RowTableAfficheUsager = tableAffiche.NewRow RowTableAfficheUsager(NOM_COL_DOSSIER) = strDossier RowTableAfficheUsager(NOM_COL_USAGER) = elemBAEPAF.pD_Nom_Prénom_visualisation RowTableAfficheUsager("NI") = elemBAEPAF.pD_NI_participant tableAffiche.Rows.Add(RowTableAfficheUsager) Else RowTableAfficheUsager = tabRow(0) End If RowTableAfficheUsager(nomCol) = getTextSuivi(elemBAEPAF) Next Next If tableAffiche.Rows.Count = 0 Then tableAffiche.Rows.Add(tableAffiche.NewRow) End If DataGridPresence.ItemsSource = tableAffiche.DefaultView DataGridPresence.FrozenColumnCount = 2 End Sub
avec dans le code XAML une simple ligne de déclaration :
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <DataGrid Grid.Row="0" Name="DataGridPresence" MaxHeight="300" ColumnWidth="SizeToHeader" IsReadOnly="True" AlternatingRowBackground="#546DD2F2" />
Ce que je voudrais arriver à faire est de mettre suivant le contenu des cellules des colonnes date un couleur suivant leurs valeurs ex :
- Présent => Vert
- Absent => Rouge
- Excusé => Orange
J'ai bien sur trouvé des tas d'exemples sur internet en passant par un style à appliquer sur la colonne ou l'utilisation d'un convertisseur et d'autres mais tous utilise le code XAML pour définir et lier les colonnes, ce qui dans mon cas n'est pas possible vu que leur nombre variable.
Donc si quelqu'un connait une astuce je lui en serai reconnaissant
Merci de m'avoir lu.
P.S. : J'avoue avoir du mal à la conversion Windows Forms => WPF même si je me soigne à coup de tutoriel
Partager