首页 文章

如何检查空Gridview

提问于
浏览
15

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

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

我已经尝试过了:

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

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

有任何想法吗?

谢谢 .

8 回答

  • 0

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

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

    <asp:GridView runat="server">
    <EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
    </asp:GridView>
    
  • 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()
    
  • 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;
         }
    
     }
    
  • 1

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

    <EmptyDataTemplate>No data found.</EmptyDataTemplate>
    

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

  • 18

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

  • 22

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

    int rowCount = GridView.Rows.Count; // returns zero
    
    GridView.DataBind();
    
    rowCount = GridView.Rows.Count; // returns actual row count
    
  • 8

    根据答案, 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 vs HeaderRow等检查更简单的版本...

    foreach (GridViewRow gvRow in myGridView.Rows)
                if (gvRow.RowType == DataControlRowType.DataRow)
                {
    //do what you need
                }
    

    我希望这有帮助 .

    简而言之,遗憾的是没有GridView.IsEmpty()函数,除非你枚举一个如下所示 .

  • 4

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

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

相关问题