如何检查空的 Gridview
Posted
技术标签:
【中文标题】如何检查空的 Gridview【英文标题】:How to check for an Empty Gridview 【发布时间】:2010-10-18 09:40:59 【问题描述】:我有一个 ASP.NET 2.0 (C#) Web 应用程序,其中我有一个从 oracle 数据库获取数据的 gridview。
我想知道如何检查 gridview 是否为空,然后做点什么。
我已经试过了:
if(GridView.Rows.Count == 0)
// Do Something
但它不起作用......
有什么想法吗?
谢谢。
【问题讨论】:
【参考方案1】:您的代码应该工作。但只有在调用了 GridView.DataBind() 之后。一般来说,我不检查 GridView 它是自己的,而是网格视图的数据源。
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
ShowEmptyData();
else
Grid.DataSource = dt;
Grid.DataBind();
【讨论】:
【参考方案2】:这不起作用,因为GridView
是数据绑定的,并且将在稍后呈现页面时获取实际数据。您应该通过直接查询网格视图的数据绑定源来检查这一点(查看网格视图绑定到的实际列表是否为空)。
如果您只想在内容为空时显示内容,则应在标记中使用<EmptyDataTemplate>
:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
【讨论】:
【参考方案3】:我同意其他回答。我想补充一点,你应该在databind方法之后得到rows.count:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
【讨论】:
更多信息:如果启用分页,gridview 将仅显示分页的最大行数。所以最好检查实际的数据源 嗨@Canavar,只是想知道 GridView.DataBind();可以不绑定到任何数据源? 如果使用 EmptyDataTemplate 并且结果中内置了行,则检查行数仍然是一个问题。通常在没有返回数据的情况下为新记录添加带有插入操作的Footer,检查行数时需要对这些行进行调整。 @uɐpuɐɥƆ 是的。在将 GV 绑定到 DataTable 后使用 ViewState[] 并在需要返回 GV 时重用视图状态。去谷歌上查询。已经讨论过很多次了。【参考方案4】:如果您使用数据绑定,则数据源的行数不是网格本身的计数。
【讨论】:
【参考方案5】:很简单:希望它对你有用.. :)
使用 GridView DataBound 的事件:绑定数据后触发。
protected void GridView1_DataBound(object sender, EventArgs e)
int rowCount = GridView1.Rows.Count;
if (rowCount == 0)
GridView1.Visible = false;
else
GridView1.Visible = true;
【讨论】:
不完全。 Row.Count 包括任何页眉和页脚【参考方案6】:首先创建一个辅助类。
public static class GridViewExtensions
public static IEnumerable<GridViewRow> AsEnumerable(this GridView grid)
foreach (GridViewRow row in grid.Rows)
yield return row;
public static bool IsEmpty(this GridView grid)
return !grid.AsEnumerable().Any(t => t.RowType == DataControlRowType.DataRow);
然后调用 IsEmpty
GridView1.IsEmpty()
【讨论】:
有机会为 VS2005 重写这个吗?【参考方案7】:如果您已将 GV 配置为自动从 DB 获取数据,那么您可以在 Source 模式下添加以下行作为 GV 的第一条语句:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
然后继续使用 GV 中的正常代码。
【讨论】:
【参考方案8】:根据已经得到的答案,GridView.Rows.Count
本身是不够的,这取决于您的GridView
的性质,特别是如果它是动态 gv,在大多数情况下是这样,而且您必须考虑 @987654323 @、页眉和页脚,它们会改变行数。
我用一个简单的方法告诉我……
//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;
所以运行这样的事情会告诉你行是否真的“ “DATA”行,或者为空或什么都没有!
显然,在我的情况下,我有一个 HiddenField 来告诉我 GridViewRow 是否是一个实际的数据行,因为我用空白行(出于我的目的)和一些数据行预填充了我的 gridview。
但是,基于 DataRow 与 HeaderRow 等检查的更简单版本...
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
//do what you need
我希望这会有所帮助。
简而言之,遗憾的是没有 GridView.IsEmpty() 函数,除非你枚举一个,如下所示。
【讨论】:
以上是关于如何检查空的 Gridview的主要内容,如果未能解决你的问题,请参考以下文章