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

        }

原文地址:https://www.cnblogs.com/fhuafeng/p/1769557.html