zoukankan      html  css  js  c++  java
  • GridView当数据源为空时仍显示表头

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

    解决:

    方法一:采用其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);
                 }
             }  

         }
    }

    另解1:

    DataTable dt_Test = new DataTable();

    dt_Test = obj.GetList();

    if(dt_Test.Rows.Count == 0)

    {

        dt_Test.Rows.Add(dt.NewRow());

        gv_Test. DataSource = dt_Test;

        gv_Test.DataBind();

        int columnCount = dt_Test.Rows[0].Cells.Count;

        gv_Test.Rows[0].Cells.Clear();

        gv_Test.Rows[0].Cells.Add(new TableCell());

        gv_Test.Rows[0].Cells[0].ColumnSpan = columnCount;

        gv_Test.Rows[0].Cells[0].Text = "没有记录";

        gv_Test.Rows[0].Cells[0].Style.Add("text-align","center");
    }

    else

    {

    gv_Test. DataSource = dt_Test;

    gv_Test.DataBind();


    }

    另解2:

    private void ShowNullTable(GridView grd)
            {
                if (grd.Rows.Count > 0) return; //有数据,不要处理
                if (grd.DataSource != null)
                {
                    if (((DataTable)grd.DataSource).Rows.Count > 0)
                    {
                        return;
                    }
                }
                GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
                foreach (DataControlField field in grd.Columns)
                {
                    TableCell cell = new TableCell();
                    cell.Text = field.HeaderText;
                    cell.Width = field.HeaderStyle.Width;
                    cell.Height = field.HeaderStyle.Height;
                    cell.ForeColor = field.HeaderStyle.ForeColor;
                    cell.Font.Size = field.HeaderStyle.Font.Size;
                    cell.Font.Bold = field.HeaderStyle.Font.Bold;
                    cell.Font.Name = field.HeaderStyle.Font.Name;
                    cell.Font.Strikeout = field.HeaderStyle.Font.Strikeout;
                    cell.Font.Underline = field.HeaderStyle.Font.Underline;
                    cell.BackColor = field.HeaderStyle.BackColor;
                    cell.VerticalAlign = field.HeaderStyle.VerticalAlign;
                    cell.HorizontalAlign = field.HeaderStyle.HorizontalAlign;
                    cell.CssClass = field.HeaderStyle.CssClass;
                    cell.BorderColor = field.HeaderStyle.BorderColor;
                    cell.BorderStyle = field.HeaderStyle.BorderStyle;
                    cell.BorderWidth = field.HeaderStyle.BorderWidth;
                    row.Cells.Add(cell);
                }

                TableItemStyle headStyle = grd.HeaderStyle;
                TableItemStyle emptyStyle = grd.EmptyDataRowStyle;
                emptyStyle.Width = headStyle.Width;
                emptyStyle.Height = headStyle.Height;
                emptyStyle.ForeColor = headStyle.ForeColor;
                emptyStyle.Font.Size = headStyle.Font.Size;
                emptyStyle.Font.Bold = headStyle.Font.Bold;
                emptyStyle.Font.Name = headStyle.Font.Name;
                emptyStyle.Font.Strikeout = headStyle.Font.Strikeout;
                emptyStyle.Font.Underline = headStyle.Font.Underline;
                emptyStyle.BackColor = headStyle.BackColor;
                emptyStyle.VerticalAlign = headStyle.VerticalAlign;
                emptyStyle.HorizontalAlign = headStyle.HorizontalAlign;
                emptyStyle.CssClass = headStyle.CssClass;
                emptyStyle.BorderColor = headStyle.BorderColor;
                emptyStyle.BorderStyle = headStyle.BorderStyle;
                emptyStyle.BorderWidth = headStyle.BorderWidth;
                if (grd.Controls.Count == 0)
                {
                    grd.Page.Response.Write("<script language='javascript'>alert('必须在初始化表格类之前执行DataBind方法并设置EmptyDataText属性不为空!');</script>");
                }
                else
                {
                    grd.Controls[0].Controls.Clear(); //删除没数据时的提示
                    grd.Controls[0].Controls.AddAt(0, row);
                    GridViewRow newRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
                    newRow.Cells.Add(new TableCell());
                    newRow.Cells[0].ColumnSpan = Columns.Count;
                    newRow.Cells[0].HorizontalAlign = HorizontalAlign.Center;
                    newRow.Cells[0].Text = EmptyDataText;
                    grd.Controls[0].Controls.Add(newRow);
                }

            }

  • 相关阅读:
    (转)单机上配置hadoop
    整数划分 Integer Partition(二)
    整数划分 Integer Partition(一)
    深入理解计算机系统:信息的处理和表示(二)整数四则运算
    深入理解计算机系统:信息的处理与表示(一)基础
    从《营造法式》为何成书于北宋 谈起
    (转)排列算法 Permutation Generation
    洛谷2971 [USACO10HOL]牛的政治Cow Politics
    洛谷1549 棋盘问题(2)
    洛谷3084 [USACO13OPEN]照片Photo
  • 原文地址:https://www.cnblogs.com/fhuafeng/p/1769557.html
Copyright © 2011-2022 走看看