Je voulais juste savoir quel est le moyen le plus simple et le plus simple d'afficher un pied-de-pied gridview pour la saisie de données, même lorsque la grille est vide? P>
6 Réponses :
Définissez votre DataSource sur le type d'objet que vous liez à la GridView avec un objet rempli de valeurs vides, puis masquez ce datarow.
EDIT: STRUT> Puisque vous utilisez un jeu de données ... p>
J'utilise un jeu de données, avez-vous un échantillon?
Je me sens comme si c'était une sorte de maladroit mais je courais bas à l'heure, alors ce correctif a fonctionné pour moi. J'ai dû cacher cette ligne "vide" rangée dans la grilleview en ajoutant mygridview.rows [0] .Visible = false.
Plus élégamment .. Étendez GridView et ajoutez une propriété ShowFooterWhenempty de manière à ne pas avoir à implémenter du code personnalisé partout.
Imports System.Web.UI.WebControls Imports System.ComponentModel Namespace UI.WebControls Public Class GridViewExtended Inherits GridView Private _footerRow As GridViewRow <DefaultValue(False), Category("Appearance"), Description("Include the footer when the table is empty")> _ Property ShowFooterWhenEmpty As Boolean <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(False)> _ Public Overrides ReadOnly Property FooterRow As GridViewRow Get If (Me._footerRow Is Nothing) Then Me.EnsureChildControls() End If Return Me._footerRow End Get End Property Protected Overrides Function CreateChildControls(ByVal dataSource As System.Collections.IEnumerable, ByVal dataBinding As Boolean) As Integer Dim returnVal As Integer = MyBase.CreateChildControls(dataSource, dataBinding) If returnVal = 0 AndAlso Me.ShowFooterWhenEmpty Then Dim table As Table = Me.Controls.OfType(Of Table)().First Me._footerRow = Me.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal, dataBinding, Nothing, Me.Columns.Cast(Of DataControlField).ToArray, table.Rows, Nothing) If Not Me.ShowFooter Then _footerRow.Visible = False End If End If Return returnVal End Function Private Overloads Function CreateRow(ByVal rowIndex As Integer, ByVal dataSourceIndex As Integer, ByVal rowType As DataControlRowType, ByVal rowState As DataControlRowState, ByVal dataBind As Boolean, ByVal dataItem As Object, ByVal fields As DataControlField(), ByVal rows As TableRowCollection, ByVal pagedDataSource As PagedDataSource) As GridViewRow Dim row As GridViewRow = Me.CreateRow(rowIndex, dataSourceIndex, rowType, rowState) Dim e As New GridViewRowEventArgs(row) If (rowType <> DataControlRowType.Pager) Then Me.InitializeRow(row, fields) Else Me.InitializePager(row, fields.Length, pagedDataSource) End If If dataBind Then row.DataItem = dataItem End If Me.OnRowCreated(e) rows.Add(row) If dataBind Then row.DataBind() Me.OnRowDataBound(e) row.DataItem = Nothing End If Return row End Function End Class End Namespace
C # Version stackoverflow.com/ Questions / 994895 / ...
Une autre solution consiste à toujours ajouter une ligne factice dans votre source de données, "Mark" cette rangée avec une valeur spécifique, puis cachez la ligne sur Rowdatabound.
Pour être plus précis, ajoutez la colonne ", 0 comme Dummyrow" à la fin de la clause de sélection de la requête, puis syndical toute la déclaration complète à p> une fois que vous avez La requête en place (qui peut être effectuée dans votre objet sqldatasource ou dans votre objet dal, votre code pour la grille ressemblera à ceci comme suit: p> Cette solution vient Avec des frais généraux évidents, car ce chèque sera fait pour chaque ligne des résultats, de ne pas mentionner que vous devez modifier votre requête SELECT, mais elle présente également l'avantage de ne pas nécessiter de modifier de manière dynamique le jeu de données (comme dans le premier exemple). et ne nécessitant pas beaucoup de code ou de devoir déployer des bibliothèques de contrôle personnalisées pour votre projet Web. p> p>
En tant que note latérale, si vous souhaitez afficher l'en-tête et le pied de page de la grille ou montrez le texte / modèle ELTLEDATA, une fois que vous avez caché la ligne avec le code que j'ai publié ci-dessus, vous pouvez vérifier votre condition et si nécessaire. Supprimer la ligne. Ensuite, le code ressemblera à ceci: Notez que nous supprimons ici la ligne de Dataitem (nécessaire car sur les post-dos, la grilleview peut redessiner sans ré-datailindinging) et la rangée de la grille elle-même (nécessaire parce que, par ce point, la rangée est déjà dans la garde d'enfants de la grille, que nous ne voulons pas). p> Enfin, si le disque maternel caché provoque d'autres problèmes dans votre grille. (Par exemple, mauvaise pagination), vous pouvez utiliser un code similaire pour supprimer votre ligne factice lorsque le gridview a plus de lignes. p> p>
Idéalement, vous voulez seulement montrer la ligne factice s'il n'y a pas encore de records dans la table. Alors définissez votre SelectCommand sur quelque chose comme ceci: p>
Sélectionnez [ID], Prénom, Nom, Email des clients
syndicat
Sélectionnez 0 [ID], '' FirstName, '' Nom, '' Email De cette façon si le compte> 0, la ligne factice n'est pas retournée. P>
Notez que la ligne factice n'a pas de clause de la clause. P>
Vous pouvez créer une ligne "vide" et la rendre invisible: