GridView当数据源为空时如何实现显示表头
(2009-03-09 17:19:16)
标签:
it |
分类: ASP.NET |
问题:asp.net 2.0
中引入的GridView控件当其数据源为空时(GridView.DataSource=null)不能显示
出表头.
解决:
方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;
缺点: 麻烦,每个GridVIew都需要设置一下.
方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable;
若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中.
缺点: 还是麻烦.
方法三:
也是要给大家介绍的方法: 扩展GridView来实现.继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧:
/// <summary>
/// GridView
扩展控件
///
</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);
}
}
}
}
出表头.
解决:
方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;
缺点: 麻烦,每个GridVIew都需要设置一下.
方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable;
若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中.
缺点: 还是麻烦.
方法三:
也是要给大家介绍的方法: 扩展GridView来实现.继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧:
}