Как проверить наличие пустого Gridview - PullRequest
15 голосов
/ 08 апреля 2009

У меня есть веб-приложение ASP.NET 2.0 (C #), и в нем у меня есть gridview, который получает свои данные из базы данных Oracle.

Я хочу знать, как проверить, пусто ли отображение сетки, и что-то сделать.

Я уже пробовал:

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

но это не работает ...

Есть идеи?

Спасибо.

Ответы [ 8 ]

22 голосов
/ 08 апреля 2009

Ваш код должен работать. Но только после того, как GridView.DataBind () был вызван. Обычно я проверяю не GridView, а источник данных в виде сетки.

DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
    ShowEmptyData();
}
else
{
    Grid.DataSource = dt;
    Grid.DataBind();
}
18 голосов
/ 08 апреля 2009

Это не работает, так как GridView привязан к данным и собирает фактические данные позднее при отображении страницы. Вы должны проверить это, напрямую запросив источник привязки данных для вида сетки (посмотрите, является ли фактический список, к которому привязано представление сетки, пустым или нет).

Если вы просто хотите отобразить что-либо, когда оно пустое, вы должны использовать <EmptyDataTemplate> в вашей разметке:

<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
8 голосов
/ 08 апреля 2009

Я согласен с другими ответами. Я хочу добавить немного информации, вы должны получить rows.count после метода databind:

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

GridView.DataBind();

rowCount = GridView.Rows.Count; // returns actual row count
4 голосов
/ 08 апреля 2009

Если вы используете привязку данных, то количество строк в источнике данных, а не количество в самой сетке.

1 голос
/ 20 марта 2016

Сначала создайте вспомогательный класс.

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 голосов
/ 24 марта 2017

Исходя из уже полученных ответов, 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;
}

Так что, запустив что-то подобное, вы узнаете, действительно ли строки Строки «ДАННЫЕ», либо пусто, либо ничего!

Очевидно, что в моем случае у меня есть HiddenField, чтобы сказать мне, является ли GridViewRow фактической строкой данных, так как я предварительно заполняю свой gridView пустыми строками (для моих целей) и некоторыми datarows.

Однако, более простая версия для проверки на основе DataRow против HeaderRow и т. Д. *

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

Надеюсь, это поможет.

Короче говоря, функции GridView.IsEmpty (), к сожалению, нет, если только вы не перечислите ее, как показано ниже.

0 голосов
/ 31 октября 2014

Если вы сконфигурировали GV для автоматического извлечения данных из БД, вы можете добавить следующую строку в качестве первого оператора вашего GV в режиме «Код»:

<EmptyDataTemplate>No data found.</EmptyDataTemplate>

А затем продолжите с нормальным кодом в вашем GV.

0 голосов
/ 04 июля 2014

Это очень просто: надеюсь, у вас это получится ..:)

Использовать событие 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;
     }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...