J'ai une application Web ASP.NET 2.0 (C #) et une grille d'affichage qui extrait ses données d'une base de données Oracle.
Je veux savoir comment vérifier si le gridview est vide et le faire quelque chose.
J'ai déjà essayé:
if(GridView.Rows.Count == 0)
{
// Do Something
}
mais ça ne marche pas ...
Des idées?
Je vous remercie.
Votre code devrait fonctionne. Mais seulement après que GridView.DataBind () a été appelé. En général, je ne vérifie pas le GridView, mais la source de données de la vue en grille.
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
Cela ne fonctionne pas car la GridView
est liée aux données et va récupérer les données réelles ultérieurement lors du rendu de la page. Vous devriez vérifier cela en interrogeant directement la source de liaison de données de la vue en grille (voir si la liste réelle liée à la vue en grille est vide ou non).
Si vous souhaitez simplement afficher quelque chose lorsqu'il est vide, vous devez utiliser <EmptyDataTemplate>
dans votre balisage:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
Je suis d'accord avec les autres réponses. Je veux ajouter peu d'informations, vous devriez obtenir rows.count après la méthode databind:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
Si vous utilisez la liaison de données, le nombre de lignes de la source de données ne correspond pas à celui de la grille.
Commencez par créer une classe d'assistance.
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);
}
}
Ensuite, il suffit d'appeler IsEmpty
GridView1.IsEmpty()
Si vous avez configuré votre GV pour extraire automatiquement les données de la base de données, vous pouvez ajouter la ligne suivante comme première instruction de votre GV en mode source:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
Et continuez ensuite avec le code normal dans votre GV.
C'est très facile: espérons que cela fonctionne pour vous .. :)
Utilisez l'événement de GridView DataBound: qui se déclenche une fois les données liées.
protected void GridView1_DataBound(object sender, EventArgs e)
{
int rowCount = GridView1.Rows.Count;
if (rowCount == 0)
{
GridView1.Visible = false;
}
else
{
GridView1.Visible = true;
}
}
Déjà basé sur les réponses, GridView.Rows.Count
ne suffit pas, en fonction de la nature de votre GridView
name__, en particulier s'il s'agit d'un gv dynamique, ce qui est le cas dans la plupart des cas, vous devez également prendre en compte Paginating
name__, Headers and Footers nombre de lignes.
J'utilise une méthode simple pour me dire ...
//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;
}
Donc, exécuter quelque chose comme ceci vous dira si les rangées sont vraiment des rangées "", Ou vides ou rien!
Évidemment, dans mon cas, j'ai un objet HiddenField pour me dire si GridViewRow est une ligne de données réelle, car je préremplit mon gridview de lignes vides (pour mes besoins) et de quelques datarows.
Cependant, une version plus simple à vérifier basée sur DataRow vs HeaderRow, etc ...
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}
J'espère que ça aide.
En bref, il n’existe malheureusement pas de fonction GridView.IsEmpty (), à moins d’en énumérer une comme indiqué ci-dessous.