//checks if a gridview has any actual rows of data (not just blank rows filled in by the Load
protected bool gvNoData(GridView gv)
{
int wsDataRow = 0;
foreach (GridViewRow gvRow in gv.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
HiddenField hf = (HiddenField)gvRow.FindControl("hfStudentID");
if (hf != null)
if (hf.Value.ToString().Length > 0)
wsDataRow +=1;
}
//if a count was generated then there are data rows, otherwise the rows are blank or nonexistant
if (wsDataRow > 0) return false;
else return true;
}
8 回答
这不起作用,因为
GridView
是数据绑定的,并且将在以后呈现页面时获取实际数据 . 您应该通过直接查询gridview的数据绑定源来检查这一点(查看绑定到网格视图的实际列表是否为空) .如果您只是想在空白时显示某些内容,则应在标记中使用
<EmptyDataTemplate>
:首先创建一个辅助类 .
然后只需调用IsEmpty
它很容易:希望它对你有用.. :)
使用GridView DataBound事件:绑定数据后触发 .
如果您已将GV配置为自动从DB获取数据,则可以在源模式下添加以下行作为GV的第一个语句:
然后继续使用GV中的常规代码 .
如果您正在使用数据绑定,则数据源的行数不是网格本身的计数 .
我同意其他答复 . 我想添加一些小信息,你应该在databind方法之后得到rows.count:
根据答案,
GridView.Rows.Count
本身是不够的,这取决于你的GridView
的性质,特别是如果它是一个动态的gv,在大多数情况下它是,加上你必须考虑Paginating
,页眉和页脚,这改变了行数 .我用一种简单的方法告诉我......
所以运行这样的东西会告诉你行是否真的是“”DATA“行,或者是空的还是空的!
显然,在我的情况下,我有一个HiddenField来告诉我GridViewRow是否是一个实际的数据行,因为我为我的gridview预填充空行(为了我的目的)和一些数据行 .
但是,基于DataRow vs HeaderRow等检查更简单的版本...
我希望这有帮助 .
简而言之,遗憾的是没有GridView.IsEmpty()函数,除非你枚举一个如下所示 .
你的代码应该有效 . 但只有在调用了GridView.DataBind()之后 . 一般来说,我不是自己,而是网格视图的数据源 .