C# 如何检查空的Gridview
我有一个ASP.NET2.0(C#)web应用程序,其中有一个gridview,它从oracle数据库获取数据 我想知道如何检查gridview是否为空,以及如何执行某些操作 我已经试过:C# 如何检查空的Gridview,c#,asp.net,gridview,null,C#,Asp.net,Gridview,Null,我有一个ASP.NET2.0(C#)web应用程序,其中有一个gridview,它从oracle数据库获取数据 我想知道如何检查gridview是否为空,以及如何执行某些操作 我已经试过: if(GridView.Rows.Count == 0) { // Do Something } 但它不起作用 有什么想法吗 谢谢。如果使用数据绑定,则数据源的行计数不是网格本身的计数。这不起作用,因为GridView是数据绑定的,将在稍后呈现页面时获取实际数据。您应该通过直接查询gridview的数据绑定
if(GridView.Rows.Count == 0)
{
// Do Something
}
但它不起作用
有什么想法吗
谢谢。如果使用数据绑定,则数据源的行计数不是网格本身的计数。这不起作用,因为
GridView
是数据绑定的,将在稍后呈现页面时获取实际数据。您应该通过直接查询gridview的数据绑定源来检查这一点(查看绑定到grid view的实际列表是否为空)
如果只想在某个内容为空时显示该内容,则应在标记中使用
:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
网格是空的
您的代码应该可以工作。但仅在调用GridView.DataBind()之后。通常我不检查GridView,而是检查grid视图的数据源
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
我同意其他的回答。我想添加一些信息,您应该在数据绑定方法之后获取rows.count:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
这很简单:希望它对你有用……) 使用GridView数据绑定的事件:在数据绑定后激发
protected void GridView1_DataBound(object sender, EventArgs e)
{
int rowCount = GridView1.Rows.Count;
if (rowCount == 0)
{
GridView1.Visible = false;
}
else
{
GridView1.Visible = true;
}
}
如果已将GV配置为自动从DB获取数据,则可以在源模式下添加以下行作为GV的第一条语句:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
未找到任何数据。
然后继续使用GV中的常规代码。首先创建一个帮助器类
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);
}
}
根据已有的答案,
GridView.Rows.Count本身是不够的,这取决于您的GridView
的性质,尤其是如果它是动态gv(在大多数情况下是动态gv),而且您必须考虑到分页
、页眉和页脚,它们会改变行数
我用一个简单的方法告诉我
//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;
}
因此,运行类似这样的操作将告诉您行是否真的是“
“数据”行,或为空或无
显然,在我的例子中,我有一个HiddenField来告诉我GridViewRow是否是实际的数据行,因为我在gridview中预先填充了空行(出于我的目的)和一些数据行
然而,一个基于DataRow vs HeaderRow等更简单的检查版本
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}
我希望这有帮助
简而言之,很遗憾,没有GridView.IsEmpty()函数,除非您按如下所示枚举一个。还有一点信息:如果启用了分页,GridView将只显示分页的最大行数。因此,最好检查实际的datasourceHi@Canavar,只是想知道GridView.DataBind()是否;可以不绑定到任何数据源?如果使用EmptyDataTemplate并且结果中内置了行,则检查行数仍然可能是一个问题。在没有返回数据时,通常会为新记录添加带有插入操作的页脚,检查行数时需要对这些行进行调整。@uɐpuɥƆyes。将GV绑定到DataTable后使用ViewState[],并在需要返回GV时重新使用ViewState。Google it.这已经讨论过很多次了。是否有可能为VS2005重写它?不完全正确。行数包括任何页眉和页脚
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}