数据源为空时如何让GridView显示表头和提示
1个回答
展开全部
解决: 方法一:采用其EmptyTemplate来实现,模版中写一个静态的table; 如果你的表头只是html的文本,没有任何控件。你可以在表头显示出来的时候,拷贝表头部分的html,然后放到EmptyDataTemplate里面。 缺点: 麻烦,每个GridVIew都需要设置一下。 方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable; 若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中。 缺点: 还是麻烦。继承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); } } } }
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询