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

    REF:

    http://mattberseth2.com/demo/Default.aspx?Name=How+To%3a+Show+Header+and+Footer+Rows+in+an+Empty+GridView&Filter=All

    http://www.cnblogs.com/jianyi0115/archive/2007/03/16/677728.html

    http://www.cnblogs.com/linux-withwind/archive/2007/03/22/684180.html

  • 相关阅读:
    windows设置自动登录
    windows zabbix agent
    同时给AD用户加入多个组
    zabbix监控DELL戴尔idrac卡
    Windows安装Zabbix Agent
    各服务器厂商默认密码
    AD域管理命令工具
    linux服务五——rsync 服务部署详解
    linux服务四——SSH服务详解
    LINUX核心命令实战总结十三——系统常用内置命令
  • 原文地址:https://www.cnblogs.com/emanlee/p/1411142.html
Copyright © 2020-2023  润新知