【问题标题】:Infragistics grid "on-demand" appearance基础设施网格“按需”亮相
【发布时间】:2008-11-12 15:31:47
【问题描述】:

我们正在使用 Infragistics 网格(很可能,我们最终会使用 8.2 版本)并且我们希望“按需”配置行/单元格外观,以便能够提供某种“动态外观” .

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

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

还是我错了?有什么帮助吗?

澄清:我说的是 WinForms Infragistics UltraGrid

【问题讨论】:

  • “Infragistics 似乎没有这样的事件”——有人没有做足够的研究。
  • 这是一个问题,不是我的博士论文。

标签: customization infragistics appearance ultrawingrid


【解决方案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

【讨论】:

    【解决方案2】:

    有一个事件。我不记得它到底叫什么,但它必须是“DataRowBound”或“ItemDataBinding”之类的东西。

    另外,this article 可能会有所帮助。

    这与您的问题无关,但我会远离大量使用 Infragistics 控件 - 它们非常繁重,会大大减慢页面呈现过程。只是我的 0.02 美元。

    【讨论】:

    • 感谢您的尝试,但答案对我没有帮助,并且与问题无关。所以我投了反对票,仅此而已。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多