Pergunta

Estamos usando grade Infragistics (provavelmente, teremos versão 8.2 no final) e queremos linha configure / células aparências "on-demand", a fim de ser capaz de fornecer uma espécie de "aparência dinâmica" .

Por exemplo, eu quero alguma célula a ser vermelho ou verde, dependendo de seu valor. Nós pode querer ajustar outras características, bem como (fonte, tamanho, imagem, etc).

Um lugar perfeito para fazê-lo seria algum evento, que acontece antes de uma célula fica repintado ... Mas parece que não existe tal evento em Infragistics ...

Ou estou errado? Qualquer ajuda?

Esclarecimento: Eu estou falando sobre WinForms Infragistics UltraGrid

Foi útil?

Solução 3

Nós finalmente chegar a duas soluções para esse problema.

Para alguns dos conteúdos dinâmicos usamos elementos de rede, aparência e reinicializar-lo "on-demand".

Para a aparência extremamente recurso crítico usamos UltraGrid.DrawFilter (ver também interface de IUIElementDrawFilter).

Outras dicas

Eu tinha que fazer exatamente isso com o IG WebGrid alguns anos atrás, e era ... digamos ... doloroso. No entanto, o WebGrid tinha a vantagem de um único ponto de tornar - uma vez que o HTML foi emitida, que foram criados

Para lidar com isso em WinGrid, eu tentei uma variedade de diferentes eventos, tanto no grid e a fonte de dados, e se reuniu com abjeta falha a cada passo do caminho. O único evento cheguei ao trabalho foi Paint, o que provavelmente irá criar um problema de desempenho.

Para Paint, aqui está o que eu cortei juntos. Eu não sou orgulhoso deste código, e eu provavelmente não iria colocá-lo em produção, mas aqui é assim mesmo (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

Há um evento. Não me lembro exatamente o que é chamado, mas tem que ser algo como 'DataRowBound' ou 'ItemDataBinding', etc ..

Além disso, este artigo pode ajudar.

Não que isso tem alguma coisa a ver com a sua pergunta, mas eu ficaria longe uso pesado de controles Infragistics - eles são muito pesado e vai abrandar o processo de renderização de páginas consideravelmente. Just my $ 0,02.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top