我们正在使用Infragistics网格(最有可能的是,我们最终会有8.2版本),我们希望“按需”配置行/单元格外观,以便能够提供某种“动态外观”
例如,我希望某些单元格为红色或绿色,具体取决于其值。我们可能还想调整其他特征(字体,大小,图像等)。
一个完美的地方就是某个事件,这个事件发生在一个细胞被重新绘制之前......但是在Infragistics中似乎没有这样的事件......
或者我错了?有什么帮助吗?
澄清:我在谈论WinForms Infragistics UltraGrid
答案 0 :(得分:1)
几年前我必须与IG WebGrid做到这一点,而且......我们应该说......痛苦。但是,WebGrid具有单个渲染点的优势 - 一旦HTML被发射,我们就被设置了!
为了在WinGrid中处理这个问题,我在网格和数据源上尝试了各种不同的事件,并且在每一步都遇到了严重的失败。我开始工作的唯一事件是Paint
,这可能会产生性能问题。
对于Paint
,这是我一起攻击的内容。我对这段代码并不感到骄傲,我可能不会把它投入生产,但无论如何它都是(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;
}
}
}
和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
答案 1 :(得分:0)
有一个事件。我不记得究竟是什么,但它必须是'DataRowBound'或'ItemDataBinding'等等。
此外,this article可能有所帮助。
并不是说这与你的问题有任何关系,但是我不会大量使用Infragistics控件 - 它们非常繁重,会大大减慢页面渲染过程。只需我0.02美元。
答案 2 :(得分:0)
我们终于为这个问题提出了两个解决方案。
对于某些动态内容,我们使用网格元素外观并“按需”重新初始化。
对于极其资源关键的外观,我们使用UltraGrid.DrawFilter(另请参阅IUIElementDrawFilter接口)。