数据源为空时如何让GridView显示表头和提示[转]


问题:asp.net 2.0 中引入的GridView控件当其数据源为空时(GridView.DataSource=null)不能显示出表头.
解决:
方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;
如果你的表头只是html的文本,没有任何控件。你可以在表头显示出来的时候,拷贝表头部分的html,然后放到EmptyDataTemplate里面。
缺点: 麻烦,每个GridVIew都需要设置一下.
方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable;
若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中.
缺点: 还是麻烦.
方法三:
也是要给大家介绍的方法: 扩展GridView来实现.继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧:

/// <summary>
/// GridView 扩展控件
/// @author:jianyi0115@163.com
/// </summary>
publicclassGridView:System.Web.UI.WebControls.GridView
{
privatebool_enableEmptyContentRender
=true;
///<summary>
///是否数据为空时显示标题行
///</summary>
publicboolEnableEmptyContentRender
{
set{_enableEmptyContentRender
=value;}
get{
return_enableEmptyContentRender;}
}

privatestring_EmptyDataCellCssClass;
///<summary>
///为空时信息单元格样式类
///</summary>
publicstringEmptyDataCellCssClass
{
set{_EmptyDataCellCssClass
=value;}
get{
return_EmptyDataCellCssClass;}
}

///<summary>
///为空时输出内容
///</summary>
///<paramname="writer"></param>
protectedvirtualvoidRenderEmptyContent(HtmlTextWriterwriter)
{
Tablet
=newTable(); //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);

TableRowrow
=newTableRow();
t.Rows.Add(row);

foreach(DataControlFieldf
inthis.Columns) //generate table header
{
TableCellcell
=newTableCell();

cell.Text
=f.HeaderText;

cell.CssClass
="TdHeaderStyle1"; //这里把表头样式写死了

row.Cells.Add(cell);
}

TableRowrow2
=newTableRow();
t.Rows.Add(row2);

TableCellmsgCell
=newTableCell();
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);
}

protectedoverride
voidRender(HtmlTextWriterwriter)
{
if(_enableEmptyContentRender&&(this.Rows.Count==0||this.Rows[0].RowType==DataControlRowType.EmptyDataRow))
{
RenderEmptyContent(writer);
}
else
{
base.Render(writer);
}
}

}
}
优质内容筛选与推荐>>
1、WCF测试客户端出现红色叹号
2、C#操作SQL SERVER数据库通用类
3、续写文件
4、转载 学习 动态代码的使用(反射和动态生成类)
5、求二维数组中最大子数组的和


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号