Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查空的Gridview_C#_Asp.net_Gridview_Null - Fatal编程技术网

C# 如何检查空的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的数据绑定

我有一个ASP.NET2.0(C#)web应用程序,其中有一个gridview,它从oracle数据库获取数据

我想知道如何检查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
            }