grade Infragistics “on-demand” aparência
-
08-07-2019 - |
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
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.