2011-08-26 37 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(false)] 
public bool SomeCondition 
{ 
    get { return someCondition; } 
    set { someCondition = value; } 
} 
+0

對不起,也許我的問題可能會更清楚,我會在下班後嘗試修改它,但是當我說*默認格式字符串*時,我不是指默認值,而是應用程序默認值。 – ProfK

相關問題