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

        } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ASP.NET 中,可以通过以下步骤来绑定和显示数据GridView 控件: 1. 创建 GridView 控件,并设置 DataSource 属性为数据源。 2. 在代码中,将数据源绑定到 GridView 控件,可以使用如下代码: ``` GridView1.DataSource = 数据源; GridView1.DataBind(); ``` 3. 在 GridView 控件中,可以通过字段或模板列来显示数据。字段列可以自动绑定到数据源中的字段,而模板列可以自定义显示内容和样式。例如,可以使用 BoundField 来绑定字段列,使用 TemplateField 来创建模板列。 4. 可以设置 GridView 控件的样式和属性,例如分页、排序、过滤等。可以使用 PagerSettings、Sorting、Filtering 等属性来实现这些功能。 在 Android 开发中,可以通过以下步骤来显示数据GridView 控件: 1. 创建 GridView 控件,并设置 Adapter 属性为数据适配器。 2. 创建数据适配器,可以使用 ArrayAdapter 或自定义适配器。例如,可以使用 ArrayAdapter 来显示字符串数组,或使用 BaseAdapter 来自定义显示视图。 3. 在适配器中,实现 getView() 方法来创建视图并显示数据。 4. 设置 GridView 控件的列数、行间距、列间距、选择模式等属性,以及监听点击事件、滚动事件等。 例如,以下是在 Android 中使用 ArrayAdapter 来显示字符串数组的示例代码: ``` GridView gridView = findViewById(R.id.gridview); String[] data = {"item1", "item2", "item3", "item4", "item5"}; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); gridView.setAdapter(adapter); ``` 这样就可以在 GridView 控件中显示字符串数组中的内容了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值