ASP.NET GridView格式单元格

时间:2009-03-17 15:25:12

标签: asp.net gridview

我有一个名为SpecialGridView的类,它继承自GridView

另一方面,我有报告页面使用此SpecialGridView来显示数据。

属性autogeneratedcolumns设置为true,我想保留此选项。

为了放置数据格式,我重写了“CreateAutoGeneratedColumn”来解析数据是否为“Decimal”时是否会建立此类数据的格式。但我得到一个例外“NotSupportedException”

关于如何解决它的任何想法? 提前谢谢。

这里是我写的代码:

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

问候。
Josema

1 个答案:

答案 0 :(得分:0)

这是一个解决方案(带反射):

  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;
    }
相关问题