GridView固定表头问题

it2022-05-09  20

asp.net 2.0 中引入的GridView控件当其数据源为空时(GridView.DataSource=null)不能显示出表头。

  解决:

 

  方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;

 

  如果你的表头只是html的文本,没有任何控件。你可以在表头显示出来的时候,拷贝表头部分的html,然后放到EmptyDataTemplate里面。

 

  缺点: 麻烦,每个GridVIew都需要设置一下。

 

  方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable;

 

  若数据源是集合类(ArrayList,List等),无数据时,生成一个空的实体,加入到集合类中。

 

  缺点: 还是麻烦。

 

###StudyGet_Info_Pagination_SIGN###

 

  方法三:

 

  也是要给大家介绍的方法: 扩展GridView来实现。继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧:

 

  ///

 

  /// GridView 扩展控件

 

  ///

  ///

 

  public class GridView : System.Web.UI.WebControls.GridView

 

  {

 

  private bool _enableEmptyContentRender = true ;

 

  ///

 

  /// 是否数据为空时显示标题行

 

  ///

 

  public bool EnableEmptyContentRender

 

  {

 

  set { _enableEmptyContentRender = value; }

 

  get { return _enableEmptyContentRender; }

 

  }

 

  private string _EmptyDataCellCssClass ;

 

  ///

 

  /// 为空时信息单元格样式类

 

  ///

 

  public string EmptyDataCellCssClass

 

  {

 

  set { _EmptyDataCellCssClass = value ; }

 

  get { return _EmptyDataCellCssClass ; }

 

  }

 

  ///

 

  /// 为空时输出内容

 

  ///

 

  ///

 

  protected virtual void RenderEmptyContent(HtmlTextWriter writer)

 

  {

 

  Table t = new Table(); //create a table

 

  t.CssClass = this.CssClass; //copy all property

 

  t.GridLines = this.GridLines;

 

  t.BorderStyle = this.BorderStyle;

 

  t.BorderWidth = this.BorderWidth;

 

  t.CellPadding = this.CellPadding;

 

  t.CellSpacing = this.CellSpacing;

 

  t.HorizontalAlign = this.HorizontalAlign;

 

  t.Width = this.Width;

 

  t.CopyBaseAttributes(this);

 

  TableRow row = new TableRow();

 

  t.Rows.Add(row);

 

  foreach (DataControlField f in this.Columns) //generate table header

 

  {

 

  TableCell cell = new TableCell();

 

  cell.Text = f.HeaderText;

 

  cell.CssClass = "TdHeaderStyle1"; //这里把表头样式写死了

 

  row.Cells.Add(cell);

 

  }

 

  TableRow row2 = new TableRow();

 

  t.Rows.Add(row2);

 

  TableCell msgCell = new TableCell();

 

  msgCell.CssClass = this._EmptyDataCellCssClass;

 

  if (this.EmptyDataTemplate != null) //the second row, use the template

 

  {

 

  this.EmptyDataTemplate.InstantiateIn(msgCell);

 

  }

 

  else //the second row, use the EmptyDataText

 

  {

 

  msgCell.Text = this.EmptyDataText;

 

  }

 

  msgCell.HorizontalAlign = HorizontalAlign.Center;

 

  msgCell.ColumnSpan = this.Columns.Count;

 

  row2.Cells.Add(msgCell);

 

  t.RenderControl(writer);

 

  }

 

  protected override void Render(HtmlTextWriter writer)

 

  {

 

  if ( _enableEmptyContentRender && ( this.Rows.Count == 0 || this.Rows[0].RowType == DataControlRowType.EmptyDataRow) )

 

  {

 

  RenderEmptyContent(writer);

 

  }

 

  else

 

  {

 

  base.Render(writer);

 

  }

 

  }

 

  }

 

  }

转载于:https://www.cnblogs.com/zt04985807/archive/2009/01/12/1374022.html

相关资源:Gridview固定表头(JS方法)

最新回复(0)