Mise en forme cellule DataGrid dynamiquement par le code.
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.
http://img11.hostingpics.net/thumbs/...99404sance.jpg
J'ai donc le code suivant pour créer la table et lier l'info :
Code:
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:
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 :P
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 :aie: