我们正在使用Infragistics网格(最有可能的是,我们最终会有8.2版本),我们希望按需“配置行/单元格外观”。为了能够提供某种“动态外观”。

例如,我希望某些单元格为红色或绿色,具体取决于其值。我们可能还想调整其他特征(字体,大小,图像等)。

一个完美的地方就是某个事件,这个事件发生在一个细胞被重新绘制之前......但是在Infragistics中似乎没有这样的事件......

或者我错了?有什么帮助吗?

澄清:我在谈论WinForms Infragistics UltraGrid

有帮助吗?

解决方案 3

我们终于为这个问题提出了两个解决方案。

对于某些动态内容,我们使用网格元素外观并“按需”重新初始化它。

对于极其资源关键的外观,我们使用UltraGrid.DrawFilter(另请参阅IUIElementDrawFilter接口)。

其他提示

几年前我必须与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

有一个事件。我不记得究竟是什么,但它必须是'DataRowBound'或'ItemDataBinding'等等。

另外,这篇文章可能有帮助。

并不是说这与你的问题有任何关系,但是我不会大量使用Infragistics控件 - 它们非常繁重,会大大减慢页面渲染过程。只需我0.02美元。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top