GridView当数据源为空时如何实现显⽰表头
问题:asp 2.0 中引⼊的GridView控件当其数据源为空时(GridView.DataSource=null)不能显⽰
出表头.
解决:
⽅法⼀:采⽤其EmptyTemplate来实现,模版中写⼀个静态的table;
缺点: ⿇烦,每个GridVIew都需要设置⼀下.
⽅法⼆: 若数据源为DataTable,则当⽆数据时,始终返回⼀个空⾏的DataTable;
若数据源是集合类(ArrayList,List<T>等),⽆数据时,⽣成⼀个空的实体,加⼊到集合类中.
缺点: 还是⿇烦.
⽅法三:
也是要给⼤家介绍的⽅法: 扩展GridView来实现.继承GridVie,重写Render⽅法,当其数据源为空时做⼀下处理,直接看代码吧:    /// <summary>
/// GridView 扩展控件
/// @author:jianyi0115@163
/// </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);
}
gridview不显示else
{
base.Render(writer);
}
}
}
}
I love the improvement!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。