当前位置:首页 » 网站技术 » ASP.NET

没有数据时显示GridView表格

...

    问题:asp.net2.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);
   }
   }
  
   }
  } 

继续阅读
ASP.NET2.0连接SQL Server数据库详解
ASP.NET2.0+SQL Server2005构建多层应用
ASP.NET2.0中CSS失效解决方案
ASP.NET2.0隐藏GridView列的问题
ASP.NET2.0中使用存储过程
ASP.NET2.0 Windows身份验证
ASP.NET2.0操作数据库方法
ASP.NET2.0中客户端脚本使用
ASP.NET2.0数据库连接(VS2005+SQL2005)
发表评论

昵称:
最新评论
暂时没有评论!