Domanda

Stiamo usando la griglia Infragistics (molto probabilmente, alla fine avremo la versione 8.2) e vogliamo configurare gli aspetti di riga / cella " on-demand " per poter fornire una sorta di "aspetto dinamico".

Ad esempio, voglio che una cella sia rossa o verde, a seconda del suo valore. Potremmo voler modificare anche altre caratteristiche (font, dimensioni, immagine, ecc.)

Un posto perfetto per farlo sarebbe un evento, che accade prima che una cellula venga ridipinta ... Ma sembra che non ci sia un evento simile in Infragistics ...

O sbaglio? Qualche aiuto?

Chiarimento: sto parlando di WinForms Infragistics UltraGrid

È stato utile?

Soluzione 3

Abbiamo finalmente trovato due soluzioni per questo problema.

Per alcuni dei contenuti dinamici utilizziamo l'aspetto degli elementi della griglia e reinizializziamo " on-demand " ;.

Per l'aspetto estremamente critico in termini di risorse utilizziamo UltraGrid.DrawFilter (vedi anche l'interfaccia IUIElementDrawFilter).

Altri suggerimenti

Ho dovuto fare esattamente questo con IG WebGrid qualche anno fa, ed è stato ... dovremmo dire ... doloroso. Tuttavia, WebGrid ha il vantaggio di un singolo punto di rendering: una volta emesso l'HTML, siamo stati impostati!

Per gestire questo problema in WinGrid, ho provato una varietà di eventi diversi, sia sulla griglia che sull'origine dati, e ho riscontrato un errore irreversibile in ogni fase del processo. L'unico evento in cui sono riuscito a lavorare è stato Paint , che probabilmente creerà un problema di prestazioni.

Per Paint , ecco cosa ho hackerato insieme. Non sono orgoglioso di questo codice e probabilmente non lo metterei in produzione, ma eccolo qui (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;
        }
    }
}

e 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

C'è un evento. Non ricordo esattamente come si chiama, ma deve essere qualcosa come "DataRowBound" o "ItemDataBinding", ecc.

Inoltre, questo articolo potrebbe essere di aiuto.

Non che questo abbia qualcosa a che fare con la tua domanda, ma starei lontano dall'uso pesante dei controlli Infragistics: sono molto pesanti e rallenteranno notevolmente il processo di rendering della pagina. Solo i miei $ 0,02.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top