2009-03-17 2 views
2

J'ai une classe appelée SpecialGridView qui hérite de GridView.Cellules au format GridView ASP.NET

D'autre part, j'ai des pages de rapport qui utilisent ce SpecialGridView pour montrer des données.

La propriété autogeneratedcolumns a été définie sur true et je souhaite conserver cette option.

Pour mettre le format de données, j'ai substitué le "CreateAutoGeneratedColumn" pour analyser si les données sont "Decimal" stablish le format pour ce type de données. Mais je reçois une exception "NotSupportedException"

Une idée sur la façon de le résoudre?
Merci d'avance.

Voici le code que j'ai écrit:

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; 
} 

Salutations.
Josema

Répondre

0

Ceci est une solution (par réflexion):

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; 
    }