GridView当数据源为空时实现显示表头

GridView当数据源为空时如何实现显示表头

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

解决:

方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;
缺点: 麻烦,每个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);
             }
         }  

     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值