zoukankan      html  css  js  c++  java
  • 数据源为空时如何让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);
                }
            }    

        }
    }
  • 相关阅读:
    IPV6地址中的%号什么意思
    比较分析C++、Java、Python、R语言的面向对象特征,这些特征如何实现的?有什么相同点?
    Linux 查看本机串口方法
    非对称加密与GPG/PGP
    bootstrap下拉三角
    bootstrap文本背景色
    bootstrap文本颜色
    bootstrap栅格系统响应式
    软件测试(一) 软件测试的阶段划分
    YoTube 视频如何下载
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/925075.html
Copyright © 2011-2022 走看看