如何检查空Gridview

时间:2009-04-08 19:28:28

标签: c# asp.net gridview null

我有一个ASP.NET 2.0(C#)Web应用程序,其中有一个gridview,它从oracle数据库中获取数据。

我想知道如何检查gridview是否为空,并且做了些什么。

我已经尝试过了:

if(GridView.Rows.Count == 0)
{
// Do Something
}

但它不起作用......

有什么想法吗?

谢谢。

8 个答案:

答案 0 :(得分:22)

您的代码应该有效。但只有在调用了GridView.DataBind()之后。一般来说,我不检查GridView是自己的,而是检查网格视图的数据源。

DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
    ShowEmptyData();
}
else
{
    Grid.DataSource = dt;
    Grid.DataBind();
}

答案 1 :(得分:18)

这不起作用,因为GridView是数据绑定的,并且将在以后呈现页面时获取实际数据。您应该通过直接查询gridview的数据绑定源来检查这一点(查看网格视图绑定的实际列表是否为空)。

如果您只想在空白时显示某些内容,则应在标记中使用<EmptyDataTemplate>

<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>

答案 2 :(得分:8)

我同意其他回复。我想添加一点信息,你应该在databind方法之后得到rows.count:

int rowCount = GridView.Rows.Count; // returns zero

GridView.DataBind();

rowCount = GridView.Rows.Count; // returns actual row count

答案 3 :(得分:4)

如果您正在使用数据绑定,则数据源的行数不是网格本身的计数。

答案 4 :(得分:1)

首先创建一个帮助类。

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()

答案 5 :(得分:0)

非常简单:希望它适合你...... :)

使用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;
     }

 }

答案 6 :(得分:0)

如果您已将GV配置为自动从DB获取数据,那么您可以在源模式中添加以下行作为GV的第一个语句:

<EmptyDataTemplate>No data found.</EmptyDataTemplate>

然后继续使用GV中的常规代码。

答案 7 :(得分:0)

根据答案,GridView.Rows.Count本身是不够的,具体取决于GridView的性质,特别是如果它是一个动态gv,在大多数情况下它是,加上你必须Paginating,页眉和页脚中的因子,它会改变行数。

我用一种简单的方法告诉我......

//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()函数,除非你枚举一个如下所示。