Soyez le premier à donner votre avis sur cette source.
Snippet vu 18 829 fois - Téléchargée 19 fois
' ******************************************** ' *** A copier dans la page default.aspx : ' ******************************************** <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Un GridView dans un Repeater</title> </head> <body> <form id="form1" runat="server"> <div> <b>Un GridView dans un Repeater</b><br /> <br /> <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <ItemTemplate> <b>Ville : <%#Container.DataItem("Ville")%></b><br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" > <Columns> <asp:BoundField DataField="Nom" HeaderText="Nom" /> <asp:BoundField DataField="Prenom" HeaderText="Prénom" /> <asp:BoundField DataField="Ville" HeaderText="Ville" /> <asp:TemplateField> <ItemTemplate> <asp:Button ID="btEditer" runat="server" Text="Editer" CommandArgument='<%# Container.DataItem("ID")%>' OnCommand="GridView1_Editer" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <br /> </ItemTemplate> </asp:Repeater> <asp:Label ID="lbMessage" runat="server" Text="" EnableViewState="False" ></asp:Label> </div> </form> </body> </html> ' ******************************************** ' *** A copier dans la page default.aspx.vb : ' ******************************************** Imports System.Data Imports System.Data.SqlClient Partial Class _Default Inherits System.Web.UI.Page ' Chaine de connexion à la base de données Public chaineConnexion As String = "Data Source=localhost;Integrated Security=True;database=viewgrid" Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' Si la page n'est pas en PostBack If Not Page.IsPostBack Then ' Génération du Repeater Repeater1.DataSource = dsListeVilles() Repeater1.DataBind() End If End Sub ''' <summary> ''' Sub déclanchée au moment de la construction d'un élément du Repeater ''' </summary> Sub Repeater1_ItemDataBound(ByVal Sender As Object, ByVal e As RepeaterItemEventArgs) ' Si il s'agit d'un élément Item ou AlternatingItem. If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then ' Récupération du nom de la ville. Dim myVille As String = DirectCast(e.Item.DataItem, DataRowView).Item("Ville").ToString ' Stock le GridView1 dans une variable Dim myGridView As GridView = CType(e.Item.FindControl("GridView1"), GridView) ' Construction du GridView myGridView.DataSource = dsListeUtilisateurs(myVille) myGridView.DataBind() End If End Sub ''' <summary> ''' Evénement sur le bouton Editer du GridView ''' </summary> Protected Sub GridView1_Editer(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs) ' Récupération du bouton Dim myButton As Button = CType(sender, Button) ' Affiche un message lbMessage.Text = "ID de l'utilisateur : " & myButton.CommandArgument End Sub ''' <summary> ''' Retourne un DataSet contenant la liste de toutes les villes ''' </summary> Private Function dsListeVilles() As DataSet ' Création d'une instance de connexion Dim myConnexion As SqlConnection = New SqlConnection(chaineConnexion) ' Création d'un DataSet Dim myDataset As New DataSet ' Envoie de la requette Dim dtr As New SqlClient.SqlDataAdapter("Select Distinct Ville from Utilisateurs Order By Ville", myConnexion) ' Peuple le DataSet dtr.Fill(myDataset) ' Retourne le DataSet Return myDataset End Function ''' <summary> ''' Retourne un DataSet contenant les utilisateurs pour une ville ''' </summary> Private Function dsListeUtilisateurs(ByVal nomVille As String) As DataSet ' Création d'une instance de connexion Dim myConnexion As SqlConnection = New SqlConnection(chaineConnexion) ' Création d'un DataSet Dim myDataset As New DataSet ' Envoie de la requette Dim dtr As New SqlClient.SqlDataAdapter("Select * from Utilisateurs Where (Ville = '" & nomVille & "') Order By Nom", myConnexion) ' Peuple le DataSet dtr.Fill(myDataset) ' Retourne le DataSet Return myDataset End Function End Class
23 nov. 2007 à 17:51
Erreur 1 Le type ou le nom d'espace de noms 'DataRowView' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\Documents and Settings\Silver Claw\Mes documents\Visual Studio 2005\WebSites\WebSite2\Products.aspx 21
Si quelqu'un pouvait m'aider merci d'avance.
21 août 2007 à 19:07
21 août 2007 à 16:37
Mais 3 remarques :
- au lieu d'utiliser l'horrible hiddenField pour récuperer ta valeur, tu peux faire un directcast(e.item.DataItem, datarowview)["Ville"]
- évite de faire plein de findcontrol / cast inutile. Ce sont des opérations couteuses. Quand tu recherches ton gridview, stock le dans une variable tu économisera un findcontrol et un cast
- évite d'utiliser la fonction eval qui elle aussi est couteuse (utilise la reflection). Comme tu utilises VB tu peux faire directement <%#Container.DataItem["Ville"]%>, pas besoin de caster (un des rares avantages de VB). En C# ce serait <%# ((DataRowView)Container.DataItem)["Ville"] %> et pour info en IronPython, jscript managed et peut être vbx : <%#Container.DataItem.Ville %> (IronRuby n'est pas encore annoncé officiellement)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.