在C#中的WinForms中使用Infragistics UltraGrid:
我有条件地在网格上更改某些GroupByRows的ForeColor的颜色。当用户单击该行时,颜色会变回活动/选定/热跟踪/任何颜色,直到他们点击其他内容。我希望有条件着色的行的文本颜色永远不会改变。这是我设置颜色的方式:
Row.Appearance.ForeColor = System.Drawing.Color.Orange;
任何想法,即使单击该行,如何使其粘住?
谢谢!
答案 0 :(得分: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属性以确定是否需要应用逻辑。
答案 1 :(得分:0)
我认为你也应该改变
grd.DisplayLayout.Override.SelectedRowAppearance.ForeColor = System.Drawning.Color.Orange;
或更好
grd.DisplayLayout.Override.GroupByRowAppearance.ForeColor = System.Drawning.Color.Orange;
抱歉,我离开了可以测试的电脑。
通常可以在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();
}
答案 2 :(得分:0)
Infragistics说:
“能够为GroupByRows提供有效和选定的条件外观”已被确定为新产品创意