Как проверить наличие пустой Gridview
У меня есть веб-приложение ASP.NET 2.0 (С#), и в нем у меня есть gridview, который получает свои данные из базы данных оракула.
Я хочу знать, как проверить, нет ли gridview, и что-то сделать.
Я уже пробовал:
if(GridView.Rows.Count == 0)
{
// Do Something
}
но он не работает...
Любые идеи?
Спасибо.
Ответы
Ответ 1
Ваш код должен работать. Но только после вызова GridView.DataBind(). Как правило, я не проверяю GridView сам, но источник данных в виде сетки.
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
Ответ 2
Это не работает, так как GridView
привязана к данным и собирается отображать фактические данные позднее при рендеринге страницы. Вы должны проверить это, напрямую обратившись к источнику привязки данных gridview (см. Если пустой список, связанный с сеткой, пуст или нет).
Если вы просто хотите отобразить что-то, когда оно пустое, вы должны использовать <EmptyDataTemplate>
в своей разметке:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
Ответ 3
Я согласен с другими ответами. Я хочу добавить небольшую информацию, вы должны получить rows.count после метода привязки данных:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
Ответ 4
Если вы используете привязку данных, количество строк в источнике данных не является подсчетом самой сетки.
Ответ 5
Сначала создайте вспомогательный класс.
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()
Ответ 6
Это очень просто: надеюсь, что это сработает для вас..:)
Использовать событие 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;
}
}
Ответ 7
Если вы настроили свой GV для автоматической выборки данных из БД, вы можете добавить следующую строку в качестве первого оператора вашего GV в режиме источника:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
И затем продолжайте с нормальным кодом в своем GV.
Ответ 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 пустыми строками (для моих целей) и некоторыми datarows.
Тем не менее, более простая версия для проверки на основе DataRow vs HeaderRow и т.д.
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}
Надеюсь, это поможет.
Короче говоря, нет функции GridView.IsEmpty(), к сожалению, если вы не перечислите ее, как показано ниже.