您的位置:首页 > 其它

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

2008-09-07 16:58 489 查看
问题:asp.net 2.0 中引入的GridView控件当其数据源为空时(GridView.DataSource=null)不能显示

出表头.

解决:

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

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

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

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

缺点: 还是麻烦.

方法三:

也是要给大家介绍的方法: 扩展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);

             }

         }  

     }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: