Comment afficher l'en-tête/pied de page d'Asp.Net Gridview avec une source de données vide?Afficher l'en-tête/pied de page de Gridview avec une source de données vide?
Répondre
avoir une lecture de this article
Vous pouvez également définir votre propre interface utilisateur personnalisée pour la ligne de données vide en utilisant le EmptyDataTemplate property.
Vous pouvez également le faire en affectant une ligne factice au DataSource de la grille. Par défaut, la source de données sera remplie avec la ligne factice. Donc, la grille montrera le bas de page & rangée factice ainsi. Pour masquer la ligne, vous pouvez ajouter un champ factice pour l'affichage ou non du contrôle. Et lie ce champ à la propriété Visible du contrôle. Enfin, lorsque vous ajoutez la ligne réelle à la source de données ... Supprimez la ligne factice que vous avez créée.
Exemple - Source:
<asp:GridView ID="grdQualify" runat="server" Width="100%" AutoGenerateColumns="False" ShowFooter="true"
EnableModelValidation="True">
<Columns>
<asp:TemplateField HeaderText="Qualifying Exam">
<ItemTemplate>
<asp:TextBox ID="txtQualifyingExam" runat="server" Text='<%# Eval("QualifyingExam") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtQualifyingExamF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Roll Number">
<ItemTemplate>
<asp:TextBox ID="txtRollNumber" runat="server" Text='<%# Eval("RollNumber") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtRollNumberF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Admission Round">
<ItemTemplate>
<asp:TextBox ID="txtAdmissionRound" runat="server" Text='<%# Eval("AdmissionRound") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAdmissionRoundF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Marks Obtained">
<ItemTemplate>
<asp:TextBox ID="txtMarksObtained" runat="server" Text='<%# Eval("MarksObtained") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtMarksObtainedF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Marks Out of">
<ItemTemplate>
<asp:TextBox ID="txtMarksOutOf" runat="server" Text='<%# Eval("MarksOutOf") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtMarksOutOfF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Percentage">
<ItemTemplate>
<asp:TextBox ID="txtPercentage" runat="server" Text='<%# Eval("Percentage") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtPercentageF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Remarks">
<ItemTemplate>
<asp:TextBox ID="txtRemarks" runat="server" Text='<%# Eval("Remarks") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtRemarksF" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDeleteQualify" runat="server" Text="Delete"
Visible='<%# Eval("ShowVisible") %>' onclick="btnDeleteQualify_Click"></asp:Button>
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="btnAddQualify" runat="server" Text="Add"
onclick="btnAddQualify_Click"></asp:Button>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Exemple - Code:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ViewState["QualifyDetails"] == null)
ViewState["QualifyDetails"] = new List<Entity_StudentAcademicQualify>();
GridDataBindQualify((List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"]);
}
}
private void GridDataBindQualify(List<Entity_StudentAcademicQualify> list)
{
if (list.Count == 0)
{
Entity_StudentAcademicQualify studentQualify = new Entity_StudentAcademicQualify();
studentQualify.ShowVisible = false;
studentQualify.QualifyingExam = string.Empty;
studentQualify.RollNumber = string.Empty;
studentQualify.AdmissionRound = string.Empty;
studentQualify.MarksObtained = 0;
studentQualify.MarksOutOf = 0;
studentQualify.Percentage = 0;
studentQualify.Remarks = string.Empty;
list.Add(studentQualify);
}
else
{
list.RemoveAt(0);
}
grdQualify.DataSource = list;
grdQualify.DataBind();
ViewState["QualifyDetails"] = list;
}
protected void btnAddQualify_Click(object sender, EventArgs e)
{
GridViewRow row = (GridViewRow)((Button)sender).Parent.Parent;
List<Entity_StudentAcademicQualify> studentQualifys =
(List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"];
Entity_StudentAcademicQualify studentQualify = new Entity_StudentAcademicQualify();
studentQualify.ShowVisible = true;
studentQualify.QualifyingExam = ((TextBox)row.FindControl("txtQualifyingExamF")).Text;
studentQualify.RollNumber = ((TextBox)row.FindControl("txtRollNumberF")).Text;
studentQualify.AdmissionRound = ((TextBox)row.FindControl("txtAdmissionRoundF")).Text;
studentQualify.MarksObtained = Convert.ToInt32(((TextBox)row.FindControl("txtMarksObtainedF")).Text);
studentQualify.MarksOutOf = Convert.ToInt32(((TextBox)row.FindControl("txtMarksOutOfF")).Text);
studentQualify.Percentage = Convert.ToInt32(((TextBox)row.FindControl("txtPercentageF")).Text);
studentQualify.Remarks = ((TextBox)row.FindControl("txtRemarksF")).Text;
studentQualifys.Add(studentQualify);
GridDataBindQualify(studentQualifys);
}
protected void btnDeleteQualify_Click(object sender, EventArgs e)
{
List<Entity_StudentAcademicQualify> studentQualifys =
(List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"];
studentQualifys.RemoveAt(((GridViewRow)((Button)sender).Parent.Parent).RowIndex);
GridDataBindQualify(studentQualifys);
}
J'ai lu beaucoup de messages en ligne à ce sujet et à la fin de celui-ci, je suis venu avec ma propre solution qui répond mes besoins, et j'espère que les besoins des autres, y compris cette question.
La nécessité de montrer en-tête/pied de page peut être parce que 1) Je veux que l'utilisateur de voir la structure de la grille, et 2) Je veux utiliser le pied de page pour ajouter de nouvelles données à la table.
Par conséquent, il ne suffit pas de montrer «aucune donnée disponible».
Donc, ma solution est de tester si des données sont disponibles. Sinon, créez la structure de la source de données et remplissez les champs obligatoires d'une ligne avec les valeurs par défaut. Ceci est important car si vous liez une source de données à la grille lorsque des champs comme boolean et dates sont vides, vous aurez des erreurs 'DBNull'. Puis lier cette nouvelle source de données à la grille. puis cachez la rangée, dans cette séquence.
Protected Sub BindGrid()
con = New SqlConnection("mainLocal")
Dim da As New SqlDataAdapter("SELECT * FROM Test", con)
Dim dt As New DataTable()
da.Fill(dt)
dim rows as integer = dt.Rows.Count
If rows = 0 Then
Dim dr As DataRow = Nothing
dr = dt.NewRow()
dr("isActive") = False
dr("Dated") = Date.Now()
dt.Rows.Add(dr)
End If
Me.TestGridView.DataSource = dt
Me.TestGridView.DataBind()
If rows = 0 Then Me.TestGridView.Rows(0).Visible = False
End Sub
Je suppose que beaucoup plus simple, plus court, plus propre!
- 1. Affichage d'un pied de page gridview avec une source de données vide (linqdatasource)
- 2. ListView - Afficher LayoutTemplate sur une source de données vide
- 3. Source de données séparée pour le pied de page Gridview
- 4. gridview avec plus d'une source de données
- 5. Comment afficher une table avec une source de données XML?
- 6. Recherche d'un Gridview avec une source de données DataTable
- 7. Source de données SQL pour gridview
- 8. asp.net gridview source de données personnalisée
- 9. colonnes non affichées lors de la liaison à gridview en utilisant linq to sql avec une source de données vide
- 10. Comment afficher les données de gridview
- 11. Source de données Linq to SQL et Gridview
- 12. édition gridview sans utiliser le contrôle de source de données
- 13. GridView - afficher '0' pour tous les en-têtes lorsque l'ensemble de données est vide
- 14. Chaîne de format de données de pied de page Gridview
- 15. Problème avec pagination Gridview efficace sans contrôle de source de données
- 16. Acquisition de certaines fonctions d'agrégat dans une source de données linq dans un GridView
- 17. Comment obtenir la source de données d'un gridview
- 18. applicationIconBadgeNumber - Comment afficher avec une valeur vide?
- 19. Définir la feuille Excel comme source de données à Gridview
- 20. linq to XML en tant que source de données gridview
- 21. Présenter une vue par défaut au lieu de tableview si la source de données est vide
- 22. Combiner des données de plusieurs sources, afficher dans ASP.Net GridView
- 23. Comment afficher une énorme quantité de données par un gridview dans asp.net en ne sélectionnant pas des données entières de la source de données?
- 24. La meilleure façon de connecter gridview à la source de données
- 25. ASP.Net GridView GridViewDeleteEventArgs.Keys vide
- 26. remplacement de données dans gridview
- 27. comment construire une grille de pagination sans source de données
- 28. GridView avec plusieurs sources de données
- 29. afficher En option, un texte à la place de GridView lorsque le GridView n'a pas de lignes
- 30. GridView de tri formé avec l'ensemble de données
En fait je préfère 'EmptyDataTemplate' plus que Bind Empty' DataSet' à 'GridView', je le fais et il y a beaucoup de problèmes et c'est pourquoi ils mettent réellement' EmptyDataTemplate'. Je blâmais Microsoft pour ne pas implémenter une telle fonctionnalité, mais lier le DataSet vide à GridView n'est pas la meilleure façon de le faire. –