2

在 C# 的 WinForms 中使用 Infragistics UltraGrid:

我有条件地更改网格上某些 GroupByRows 的 ForeColor 的颜色。当用户单击该行时,颜色会变回活动/选定/热跟踪/任何颜色,直到他们单击其他颜色。我希望我有条件着色的行的文本颜色永远不会改变。这是我设置颜色的方法:

Row.Appearance.ForeColor = System.Drawing.Color.Orange;

知道即使单击该行也如何使它保持不变?

谢谢!

4

3 回答 3

2

这可以通过绘制过滤器来设置描述的前景色来完成,因为这将始终适用。

一个简单的例子是下面的绘制过滤器,它将使所有具有橙色整数值的行分组:

public class GroupByRowDrawFilter:IUIElementDrawFilter
{
    public bool DrawElement(DrawPhase drawPhase, ref UIElementDrawParams drawParams)
    {
        GroupByRowDescriptionUIElement element = (GroupByRowDescriptionUIElement)drawParams.Element;
        if (element.GroupByRow.Value is int)
        {
            int value = (int)element.GroupByRow.Value;
            if (value % 2 == 0)
            {
                drawParams.AppearanceData.ForeColor = Color.Orange;
            }
        }

        return false;
    }

    public DrawPhase GetPhasesToFilter(ref UIElementDrawParams drawParams)
    {
        if (drawParams.Element is GroupByRowDescriptionUIElement)
            return DrawPhase.BeforeDrawElement;
        return DrawPhase.None;
    }
}

要应用绘图过滤器,请使用以下代码行:

this.ultraGrid1.DrawFilter = new GroupByRowDrawFilter();

请注意,此方法要求条件位于绘图过滤器中。如果这对您不起作用,您可以修改您当前设置 ForeColor 的逻辑以设置 GroupByRow 的 Tag 属性,然后检查绘图过滤器中的 Tag 属性以确定是否需要应用您的逻辑。

于 2012-07-08T20:25:08.927 回答
0

我认为你也应该改变

grd.DisplayLayout.Override.SelectedRowAppearance.ForeColor = System.Drawning.Color.Orange;

或更好

grd.DisplayLayout.Override.GroupByRowAppearance.ForeColor = System.Drawning.Color.Orange;

抱歉,但我远离可以测试的 PC。

通常这些属性可以在 InitializeLayout 事件中有效地更改,您可以在事件参数中获取 Layout 对象。

e.Layout.Override.GroupByRowAppearance.ForeColor = Color.Orange;

编辑:目前我发现的唯一解决方案如下

    private void grd_BeforeRowActivate(object sender, RowEventArgs e)
    {
        // You need to add the additional logic required by you to
        // determine which rows need to have the forecolo changed...
        if (e.Row.IsGroupByRow == true)
            grd.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.Orange;
        else
            grd.DisplayLayout.Override.ResetActiveRowAppearance();
    }
于 2012-06-21T16:40:13.003 回答
0

基础设施 说:

“能够为 GroupByRows 提供活动和选择的条件出现”已被确定为一个新的产品理念

于 2012-06-22T15:25:27.260 回答