2011-08-26 5 views
0

BoundField 파생 컨트롤에서 DataFormatString에 대해 다음 재정의를 작성했지만 필드는 여전히 일반 숫자 형식으로 유지됩니다. 이것은 서식 코드가 DataFormatString 속성을 호출하지 않고 개인 _dataField 필드를 사용하기 때문에 발생한다고 가정합니다. 재정의 할 기본 속성을 설정하고 싶습니다만, 사용할 기본 형식 문자열을 결정하는 선언적 FormatType enum 속성을 기반으로합니다. 내가 어디에서 할 수 있니?컨트롤 서버의 속성에 대한 기본값을 언제 설정할 수 있습니까?

public override string DataFormatString 
{ 
    get 
    {   
     var baseString = base.DataFormatString; 
     if (!string.IsNullOrWhiteSpace(baseString)) 
     { 
      return FormatStrings.Currency; 
     } 
     return baseString; 
    } 
    set 
    { 
     base.DataFormatString = value; 
    } 
} 

편집 :이 선언 속성 값은 컨트롤이 그것의 부모에 의해 작성 될 때 설정 밝혀, 그래서 제대로 페이지주기의이 단계 때까지 사용되지 않습니다 가정하는 것이 매우 안전 . 이것은 내가 실제로 알고 싶어하는 것이다.

+1

예를 들어주세요. –

+0

죄송합니다. – ProfK

답변

0

이 작업을 수행 할 수있는 가장 좋은 장소입니다. 다른 속성을 기반으로 일부 속성을 기본값으로 설정하고 싶었지만 필요한 경우이 기본값을 결정하면 불필요한 것을 알았습니다 (속성 게터와 비교할 때). 예 :

public BoundReportField() 
{ 
    _formatType = FieldFormatTypes.String; 
} 

protected virtual string GetDefaultFormatString(FieldFormatTypes formatType) 
{ 
    var prop = typeof(FormatStrings).GetProperty(formatType.ToString()).GetValue(null, null); 
    return prop.ToString(); 
} 

protected virtual IFormatProvider GetFormatProvider(FieldFormatTypes formatType) 
{ 
    var info = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
    info.NumberFormat.CurrencyDecimalDigits = 0; 
    info.NumberFormat.CurrencySymbol = "R"; 
    info.NumberFormat.CurrencyGroupSeparator = ","; 
    info.NumberFormat.CurrencyDecimalSeparator = "."; 
    return info; 
} 

private FieldFormatTypes _formatType; 
public virtual FieldFormatTypes FormatType 
{ 
    get { return _formatType; } 
    set 
    { 
     _formatType = value; 
    } 
} 

protected override string FormatDataValue(object dataValue, bool encode) 
{ 
    var formatString = DataFormatString; 
    var formatProvider = GetFormatProvider(_formatType); 
    if (string.IsNullOrWhiteSpace(formatString)) 
    { 
     formatString = GetDefaultFormatString(_formatType); 
    } 
    ApplyFormatStyles(_fieldCell); 
    var retString = string.Format(formatProvider, formatString, dataValue); 
    return retString; 
} 
0

당신은 방법의 상단에서의 DefaultValue 속성을 추가 할 수 있습니다 : 그것은 매개 변수가없는 생성자처럼 보이는

[DefaultValue(false)] 
public bool SomeCondition 
{ 
    get { return someCondition; } 
    set { someCondition = value; } 
} 
+0

미안 해요, 어쩌면 내 질문에 명확하게 될 수 있습니다, 노력하고 작업 후에 그것을 수정하지만, 내가 * 기본 서식 문자열 * 말할 때, 나는 기본값이 아니라 응용 프로그램 기본값을 의미하지는 않습니다. – ProfK

관련 문제