Pregunta

Estamos utilizando la cuadrícula de Infragistics (muy probablemente, tendremos la versión 8.2 al final) y queremos configurar las apariencias de filas / celdas "a pedido". para poder proporcionar una especie de "aspecto dinámico".

Por ejemplo, quiero que algunas celdas sean rojas o verdes, dependiendo de su valor. Es posible que también deseemos modificar otras características (fuente, tamaño, imagen, etc.).

Un lugar perfecto para hacerlo sería algún evento, que suceda antes de que una célula se vuelva a pintar ... Pero parece que no hay tal evento en Infragistics ...

¿O me equivoco? ¿Alguna ayuda?

Aclaración: estoy hablando de WinForms Infragistics UltraGrid

¿Fue útil?

Solución 3

Finalmente hemos encontrado dos soluciones para ese problema.

Para algunos de los contenidos dinámicos, usamos la apariencia de elementos de cuadrícula y los reiniciamos "a pedido".

Para la apariencia extremadamente crítica de recursos utilizamos UltraGrid.DrawFilter (ver también la interfaz IUIElementDrawFilter).

Otros consejos

Hace unos años tuve que hacer exactamente esto con IG WebGrid, y fue ... digamos ... doloroso. Sin embargo, WebGrid tenía la ventaja de un único punto de renderizado: una vez que se emitió el HTML, ¡estábamos listos!

Para lidiar con esto en WinGrid, probé una variedad de eventos diferentes, tanto en la cuadrícula como en la fuente de datos, y me encontré con una falla absoluta en cada paso del camino. El único evento que pude trabajar fue Paint , lo que probablemente creará un problema de rendimiento.

Para Paint , esto es lo que pirateé juntos. No estoy orgulloso de este código, y probablemente no lo pondría en producción, pero aquí está de todos modos (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;
        }
    }
}

y 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

Hay un evento. No recuerdo exactamente cómo se llama, pero debe ser algo así como 'DataRowBound' o 'ItemDataBinding', etc.

Además, este artículo podría ayudar.

No es que esto tenga algo que ver con su pregunta, pero me mantendría alejado del uso intensivo de los controles de Infragistics: son muy pesados ??y ralentizarán considerablemente el proceso de representación de la página. Solo mis $ 0.02.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top