2012-06-21 8 views
1

을 클릭하면 데 ForeColor이 변경 GROUPBY 행 :Infragistics의 UltraGrid : C#으로 윈폼에서 Infragistics의 UltraGrid 사용

나는 조건부 그리드에 대한 몇 가지 GroupByRows의 데 ForeColor의 색상을 변경하고 있습니다. 사용자가 행을 클릭하면 색상이 활성/선택/핫 추적/다른 색상을 클릭 할 때까지 변경됩니다. 조건부로 색이 바뀌지 않은 행의 텍스트 색을 변경하고 싶습니다. 색상을 설정하는 방법은 다음과 같습니다.

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

행을 클릭해도 스틱 만드는 법을 알려주세요.

감사합니다.

답변

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 속성을 확인하여 논리를 적용해야하는지 확인하십시오.

+0

잘 했어, 고마워. –

0

나는 당신이 또한 죄송

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

이상

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

변경해야한다고 생각하지만, 나는 멀리 내가 테스트 할 수 있습니다 PC에서입니다.

일반적으로 이러한 속성은 이벤트 인수 내에 Layout 개체를 가져 오는 InitializeLayout 이벤트에서 효과적으로 변경할 수 있습니다.

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(); 
    } 
+0

불행히도 특정 행에 색이 지정 되기만하면 전체 표에 속성을 설정해도 작동하지 않습니다. –

+0

해결 방법을 찾지 만 그다지 만족스럽지는 않지만 행이 활성 인 경우에도 forecolor가 변경됩니다. – Steve

+0

흠 ... 여전히 작동하지 않습니다. 심지어 활발한 행 모양을 끄는 시도도했습니다 : ' grd.DisplayLayout.Override.ActiveAppearancesEnabled = DefaultableBoolean.False; grd.DisplayLayout.Override.SelectedAppearancesEnabled = DefaultableBoolean.False; grd.DisplayLayout.Override.ActiveRowAppearance.ForeColor = Color.Orange;' –

0

Infragistics의는 말합니다 경우 : 활성 및 선택 조건 모습을 가지고

은 "능력 GroupByRows "는 새로운 제품 아이디어로 결정되었습니다.

관련 문제