GridView当数据源为空时仍显示表头
2010-07-01 23:28
211 查看
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); } } |
相关文章推荐
- GridView数据源为空时显示表头方法
- 数据源为空GridView显示表头和提示
- GridView数据源中没有数据的时候显示表头
- GridView当数据源为空时如何实现显示表头
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- 数据源为空时如何让GridView显示表头和提示
- GridView数据绑定时数据源为空时显示表头和"没有记录"
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- GridView当数据源为空时如何实现显示表头
- 当数据源为空时,gridview只显示表头
- 如何在数据源是空的时候,gridview显示表头(万能)
- GridView当数据源为空时如何实现显示表头 之 objDataSource
- 在GridView数据源为空时也显示表头
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- 在GridView数据源为空时也显示表头
- GridView当数据源为空时实现显示表头
- GridView绑定数据源,无记录时表头也显示的一种解决方法
- 数据源为空时让GridView显示表头和提示
- GridView绑定数据源,无记录时表头也显示的一种解决方法