2009-03-17 3 views
2

Ich habe eine Klasse namens SpecialGridView, die von GridView erbt.ASP.NET GridView Format Zellen

Zum anderen habe ich Bericht Seiten, die diese SpecialGridView verwenden, um Daten anzuzeigen.

Die Eigenschaft autogeneratedcolumns wurde auf true gesetzt, und ich möchte diese Option beibehalten.

Um das Datenformat zu setzen, habe ich die "CreateAutoGeneratedColumn" überschrieben, um zu analysieren, ob die Daten "Dezimal" das Format für diese Art von Daten sind. Aber ich bekomme eine Ausnahme "NotSupportedException"

Irgendeine Idee darüber, wie man es löst?
Vielen Dank im Voraus.

Hier ist der Code, den ich schrieb:

protected override AutoGeneratedField CreateAutoGeneratedColumn(AutoGeneratedFieldProperties fieldProperties) 
{ 
    AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField); 
    field.HtmlEncode = false; 
    string name = fieldProperties.Name; 
    ((IStateManager)field).TrackViewState(); 
    field.HeaderText = name; 
    field.SortExpression = name; 
    field.ReadOnly = fieldProperties.IsReadOnly; 
    field.DataType = fieldProperties.Type; 

    if (field.DataType == typeof(Decimal)) 
    { 
     field.DataFormatString= "{0:0.00}"; 
    } 
    return field; 
} 

Grüße.
Josema

Antwort

0

Dies ist eine Lösung (mit Reflexion):

protected override AutoGeneratedField CreateAutoGeneratedColumn(AutoGeneratedFieldProperties fieldProperties) 
    { 
    AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField); 
       StateBag sb = (StateBag)field.GetType().InvokeMember("ViewState",BindingFlags.GetProperty|BindingFlags.NonPublic|BindingFlags.Instance,null,field, new object[] {}); 
       field.HtmlEncode = false; 
       string name = fieldProperties.Name; 
       ((IStateManager)field).TrackViewState(); 
       field.SortExpression = name; 
       field.ReadOnly = fieldProperties.IsReadOnly; 
       field.DataType = fieldProperties.Type; 
       if (field.DataType == typeof(Decimal)) 
       { 
        sb["DataFormatString"]= "{0:c}"; 
       } 
       if (field.DataType == typeof(DateTime)) 
       { 
        sb["DataFormatString"] = "{0:d}"; 
       } 
       return field; 
    }