2010-10-09 8 views
0

J'essaie de créer une grille qui représente les réservations sur un mois (style Excel).WPF Datagrid avec un nombre variable de colonnes ET changer la couleur d'arrière-plan en fonction de la valeur

Pour cela, je l'ont utilisé WPF DataGrid et défini ma colonne dans le code C#:

for (int i = 0; i < noOfDaysInMonth; i++) 
{ 
     DataGridTextColumn tmpColumn = new DataGridTextColumn 
     { 
       Header = (i + 1).ToString(), 
       Binding = new Binding("CellStrings[" + i + "]"), 
     }; 

overviewBookingsDataGrid.Columns.Add(tmpColumn); 

Maintenant, cela fonctionne très bien. Le problème est que je ne sais pas comment colorer la couleur d'arrière-plan de chaque cellule selon que l'emplacement est complet, partiellement réservé ou vide. Tous les exemples que j'ai trouvés ont été en XAML et le définit avec la colonne et je ne sais pas qui se traduit par C#.

Répondre

0

Vous devez définir un style de cellule de données dans votre code XAML. Définissez des déclencheurs basés sur la propriété Tag de la cellule. Par exemple, si c'est "vert", coloriez votre cellule en vert. Une fois que vous avez rempli votre grille de données, vous pouvez parcourir la table en code, obtenir la cellule de données pour chaque élément requis, définir la balise de la cellule sur une valeur correcte et les déclencheurs de style prendront soin de colorer la cellule pour vous vous voulez effacer la couleur d'arrière-plan, réglez le Tag sur null). Ou, si vous voulez éviter XAML, vous pouvez directement définir l'arrière-plan des cellules.

Il existe de nombreux exemples sur le Web comment récupérer une cellule de données pour un élément donné, mais je vais vous donner un avertissement - étant donné que la grille de données wpf est virtualisée par défaut, vous devez faire défiler vos éléments dans affichez et appelez UpdateLayout() sur le datagridrow de l'élément, avant de pouvoir accéder en toute sécurité à une cellule dataagrid pour un datagridrow donné.

Questions connexes