2008-10-28 1 views
2

개체를, 어떤 속성 그리드의 값 섹션에 표시되어 AgeWrapper의 클래스 이름 만 AgeWrapper.Age의 값은 .재산권 그리드

어쨌든 속성 표에서 합성 객체의 클래스 이름 대신이 복합 객체 (이 경우 AgeWrapper.Age)의 값을 표시 할 수 있도록 설정해야합니까?

답변

5

형식 변환기를 만든 다음 특성을 사용하여 형식 변환기를 AgeWrapper 클래스에 적용해야합니다. 그런 다음 속성 표는 해당 유형 변환기를 사용하여 문자열을 표시합니다. 다음과 같은 형식 변환기를 만듭니다.

public class AgeWrapperConverter : ExpandableObjectConverter 
{ 
    public override bool CanConvertTo(ITypeDescriptorContext context, 
            Type destinationType) 
    { 
    // Can always convert to a string representation 
    if (destinationType == typeof(string)) 
     return true; 

    // Let base class do standard processing 
    return base.CanConvertTo(context, destinationType); 
    } 

    public override object ConvertTo(ITypeDescriptorContext context, 
            System.Globalization.CultureInfo culture, 
            object value, 
            Type destinationType) 
    { 
    // Can always convert to a string representation 
    if (destinationType == typeof(string)) 
    { 
     AgeWrapper wrapper = (AgeWrapper)value; 
     return "Age is " + wrapper.Age.ToString(); 
    } 

    // Let base class attempt other conversions 
    return base.ConvertTo(context, culture, value, destinationType); 
    } 
} 

ExpandableObjectConverter에서 상속받습니다. 이는 AgeWrapper 클래스에 그리드의 AgeWrapper 항목 옆에 + 버튼이 있어야 노출되어야하는 AgeWrapper.Age라는 자식 속성이 있기 때문입니다. 클래스에 노출시키고 자하는 자식 속성이 없으면 대신 TypeConverter에서 상속받습니다. 이제이 변환기를 수업에 적용하십시오 ...

[TypeConverter(typeof(AgeWrapperConverter))] 
public class AgeWrapper