Modification d'un fond de cellule de la grille de données de code en arrière dans Silverlight 4

StackOverflow https://stackoverflow.com/questions/7828822

Question

Je suis en train d'écrire une application qui vous permet de silverlight le texte copié par analysez délimiteurs entrées. Une fois les données analysées et est tombé dans la grille, l'utilisateur a la possibilité de « Scrub » les données. Cela se compare la valeur actuelle d'une cellule aux valeurs autorisées pour la colonne, fait son choix meilleure estimation et reliaisons les données au réseau via la propriété ItemsSource.

Mon problème est que je connais les coordonnées de chaque cellule qui a été « épurés », et je voudrais mettre en évidence cette cellule ou changer sa couleur d'arrière-plan. Pour autant que je peux voir, vous pouvez définir le fond d'un DataGridCell individuellement, mais je n'ai aucun moyen d'accéder au DataGridCell. J'ai accès aux colonnes et les lignes de la grille, mais ceux-ci aussi ne semblent pas donner accès au DataGridCell comme je l'avais espéré. Quelqu'un at-il un moyen d'accéder à un DataGridCell après la ItemsSource a été réglé?

Était-ce utile?

La solution

Si vous boucle à travers la collection de votre ItemsSource est lié, vous pouvez alors prendre chaque ligne et passer par les colonnes obtenir le contenu et la cellule - quelque chose comme ça (astuce est content.Parent comme DataGridCell):

var collection = grid.ItemsSource;
foreach (var dataItem in collection)
{
  foreach (var col in grid.Columns)
  {
    var content = col.GetCellContent(dataItem);
    if (content != null)
    {
        DataGridCell cell = content.Parent as DataGridCell;
        // do whatever you need to do with the cell like setting cell.Background 
    }
  }
}

Autres conseils

Ce code est utile pour changer la couleur de la cellule.

void datagrid_LoadingRow()
    {

        var collection = datagrid.ItemsSource;
        foreach (var dataItem in collection)
        {
            foreach (var col in datagrid.Columns)
            {
                var content1 = col.GetCellContent(dataItem);
                if (content1 != null)
                {
                    TextBlock block = content1 as TextBlock;
                    if (block != null)
                    {
                        DataGridCell cell = content1.Parent as DataGridCell;

                        string cellText = block.Text;
                        if (cellText == "True")
                        {
                            cell.Background = new SolidColorBrush(Colors.Green);
                        }
                        if (cellText == "False")
                        {
                            cell.Background = new SolidColorBrush(Colors.Red);
                        }                            
                    }


                }                  

            }
        }
    } 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top