Question

Nous utilisons la grille Infragistics (nous aurons très probablement la version 8.2 à la fin) et nous souhaitons configurer les apparences des lignes / cellules "à la demande". afin de pouvoir fournir une sorte d '"apparence dynamique".

Par exemple, je souhaite qu'une cellule soit rouge ou verte, en fonction de sa valeur. Nous voudrons peut-être également modifier d’autres caractéristiques (police, taille, image, etc.).

Un endroit parfait pour le faire serait un événement qui se produira avant qu'une cellule ne soit repeinte ... Mais il semble qu'il n'en existe aucun dans Infragistics ...

Ou est-ce que je me trompe? Toute aide?

Précision: je parle de WinForms Infragistics UltraGrid

Était-ce utile?

La solution 3

Nous avons finalement trouvé deux solutions à ce problème.

Pour certains contenus dynamiques, nous utilisons l'apparence des éléments de la grille et nous le réinitialisons "à la demande".

Pour l'aspect extrêmement critique en ressources, nous utilisons UltraGrid.DrawFilter (voir également l'interface IUIElementDrawFilter).

Autres conseils

Je devais faire exactement cela avec IG WebGrid il y a quelques années, et c'était… dirons-nous… douloureux. Cependant, WebGrid présentait l'avantage d'un seul point de rendu: une fois le code HTML émis, nous étions définis!

Pour résoudre ce problème dans WinGrid, j’ai essayé divers événements, à la fois sur la grille et sur la source de données, et j’ai rencontré un échec abject à chaque étape du processus. Le seul événement dans lequel j'ai travaillé était Paint , ce qui risquerait de créer un problème de performances.

Pour Paint , voici ce que j'ai piraté. Je ne suis pas fier de ce code et je ne le mettrais probablement pas en production, mais le voici quand même (C #):

private void UltraGrid1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    foreach (UltraGridRow r in UltraGrid1.Rows)
    {
        foreach (UltraGridCell c in r.Cells)
        {
            if (c.Text == "foo")
                c.Appearance.BackColor = Color.Green;
        }
    }
}

et VB:

Private Sub UltraGrid1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles UltraGrid1.Paint
    For Each r As UltraGridRow In UltraGrid1.Rows
        For Each c As UltraGridCell In r.Cells
            If c.Text = "foo" Then
                c.Appearance.BackColor = Color.Green
            End If
        Next
    Next
End Sub

Il y a un événement. Je ne me souviens pas exactement comment ça s'appelle, mais ça doit être quelque chose comme 'DataRowBound' ou 'ItemDataBinding', etc.

De même, cet article pourrait aider.

Cela n’a rien à voir avec votre question, mais j’éviterais une utilisation intensive des contrôles Infragistics - ils sont très lourds et ralentiront considérablement le processus de rendu de page. Juste mon 0,02 $.

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