从代码隐藏更改GridView列属性

Mik*_*ole 5 asp.net gridview

我正在这样的方法中创建一个GridView:

GridView gridView = new GridView();
gridView.DataSource = reportData.Tables[0];
gridView.DataBind();
Run Code Online (Sandbox Code Playgroud)

我稍后将它导出到Excel,它工作得很好.这些列是从我的源数据自动生成的.我想在我数据绑定之后和导出到Excel之前更改某些列的DataFormatString属性.我似乎无法找到正确的属性来改变.任何人都能指出我正确的方向吗?

Kob*_*obi 7

根据AutoGenerateColumns文档:

此选项提供了一种显示数据源中每个字段的便捷方式; 但是,您对自动生成的列字段的显示或行为的控制方式有限.

注意:自动生成的绑定列字段不会添加到Columns集合中.

我厌倦了寻找这些AutoGeneratedField没有运气的s.
我可以想到实现这一目标的几种方案(从最差到最好):

  1. 向网格添加一个事件(如RowDataBound),这将使您可以访问行的单元格,但不太方便.
  2. 不要AutoGeneratedField手动使用" 创建这些列",如下所示:

    BoundField dateField = new BoundField();
    dateField.HeaderText = "Date";
    dateField.DataField = "date";
    dateField.DataFormatString = "{0:MMMM, yyyy}";
    gridView.Columns.Add(dateField); 
    
    Run Code Online (Sandbox Code Playgroud)

    此选项可让您控制标题.

  3. 添加另一个图层以进行数据格式化和演示 这可能是最好的选择.此外,通过这种方式,您不必使用DataTables,GridView可以绑定到具有公共属性的任何对象集合(例如,到a List<Employee)),并将AutoGeneratedField它们转换为列.
    我认为这是最好的选择.假设您可以访问自动列,那么呢?您必须根据其名称或索引搜索列,这看起来非常混乱,并且会增加耦合.

而且,作为最后一点,您应该考虑使用API​​创建Excel文件.它并不那么简单,但HTML XLS文件与Excel 2007的兼容性较低 - 它会显示一条警告消息,指出文件的格式与扩展名不兼容,更糟糕的是,如果文件被打开并保存,则文件会被制动(可能会Save As这样) ,使您的文件不那么用户友好.