La GridView ASP.NET di default ha un problema (fra gli altri) legato alla visualizzazione nel caso di nessun elemento presente.
Il problema è che se non ci sono elementi nasconde l’header delle colonne.
Se si vuole che l’header resti si può seguire questo post: http://www.aspitalia.com/script/829/Mostrare-Header-GridView-ASP.NET-2.0-Mancanza-Dati.aspx
In pratica si deve estendere la classe GridView con una classe del tipo:
Public Class MyGridView
Inherits System.Web.UI.WebControls.GridView
Protected Overrides Function CreateRow( _
ByVal rowIndex As Integer, _
ByVal dataSourceIndex As Integer, _
ByVal rowType As System.Web.UI.WebControls.DataControlRowType, _
ByVal rowState As System.Web.UI.WebControls.DataControlRowState) As System.Web.UI.WebControls.GridViewRow
If (rowType = DataControlRowType.EmptyDataRow) Then
Return MyBase.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
Else
Return MyBase.CreateRow(rowIndex, dataSourceIndex, rowType, rowState)
End If
End Function
End Class
La nostra gliglia personalizzata puo’ così essere inserita nella pagina, inserendo ad esempio questa direttiva in testa:
<%@ Register TagPrefix="jvpo" Namespace="TestMyGridView" Assembly="TestMyGridView,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" %>
Quindi va dichiarato il tag EmptyDataTemplate:
<EmptyDataTemplate>Nessun elemento</EmptyDataTemplate>
In realtà il template per il caso di empty data non verrà mai renderizzato, in quanto verrà “sacrificato” per renderizzare l’header.
Però si potrà sostituirlo ad esempo con una label da visualizzare o nascondere a seconda dei casi.