首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

数据源为空时如何让GridView显示表头和提示

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

  解决:

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

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

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

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

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

  缺点: 还是麻烦。

  方法三:

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

  /// <summary>

  /// GridView 扩展控件

  /// @author:jianyi0115@163.com

  /// </summary>

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

  {

  private bool _enableEmptyContentRender = true ;

  /// <summary>

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

  /// </summary>

  public bool EnableEmptyContentRender

  {

  set { _enableEmptyContentRender = value; }

  get { return _enableEmptyContentRender; }

  }

  private string _EmptyDataCellCssClass ;

  /// <summary>

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

  /// </summary>

  public string EmptyDataCellCssClass

  {

  set { _EmptyDataCellCssClass = value ; }

  get { return _EmptyDataCellCssClass ; }

  }

  /// <summary>

  /// 为空时输出内容

  /// </summary>

  /// <param name="writer"></param>

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

  }

  }

  }

  }

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航