Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉATION D'UN GRIDVIEW DANS UN REPEATER


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : repeater, gridview, button, directcast Niveau : Débutant Date de création : 21/08/2007 Date de mise à jour : 21/08/2007 19:12:31 Vu : 9 482

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjour,

L'exemple suivant à pour but de répondre (de façon simple) à deux questions qui ressortent souvent dans les forums :
1 – Comment ajouter et gérer un contrôle dans une Repeater (Dans notre exemple un GridView).
2 – Comment ajouter et gérer un bouton personnalisé dans un GridView.

Pour utiliser mon exemple, vous devez avant tout créer une base de donnée nommée viewgrid puis une table Utilisateurs.
Voici le script SQL de création de la table :
CREATE TABLE [dbo].[Utilisateurs] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Nom] [varchar] (30) COLLATE French_CI_AS NOT NULL ,
[Prenom] [varchar] (30) COLLATE French_CI_AS NOT NULL ,
[Ville] [varchar] (30) COLLATE French_CI_AS NOT NULL
) ON [PRIMARY]
GO

Puis remplir la table avec quelques lignes de tests. Attention à bien mettre plusieurs fois la même ville pour que l'exemple soit concluant (voir la photo de l'exemple).

Voilà, bon code.

Walter

 

Source

  • ' ********************************************
  • ' *** 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 />&nbsp;<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&#233;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>
  • &nbsp;<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
' ********************************************
' *** 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 />&nbsp;<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&#233;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>
                &nbsp;<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

Historique

21 août 2007 19:12:31 :
Corrections suite aux remarques de jesusonline.

Commentaires et avis

signaler à un administrateur
Commentaire de jesusonline le 21/08/2007 16:37:27 administrateur CS

héhé : pas mal :)

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)

signaler à un administrateur
Commentaire de walterskinner le 21/08/2007 19:07:43

Merci pour tes conseilles, je corrige tout de suite.

signaler à un administrateur
Commentaire de DBugs le 23/11/2007 17:51:12

Salut j'essaye de m'inspirer de cette source pour un mini projet, mais je fais ça en C#, et j'ai une erreur que je n'arrive à résoudre.

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Image Button [ par elpens ] Bonjour, Je suis actuellement bloqué et je recherche un peu d'aide.Voilà:J'ai un gridView lié avec une db qui m'affiche des alertes. J'aimerais que qu button dans un repeater [ par fguigui ] Bonjour à tous,Dans une webform j'ai un Repeater à l'intérieur duquel j'ai des textbox, label et button du genre :        &lt;ctrl:RepeatBudgets ID="R Anomalie lors de l'afichage d'un gridview ou autre objet de données [ par Magjjy ] Bonjour,Je travaille avec Visual Studio 2005 et lorsque j'ajoute dans un projet (vierge ou non) un objet de type gridview, detailsview ..., à l'execut écrire en mejiscule dans gridview [ par krouks212 ] Bonjour, s'il vous je vous écrire en majiscule dans les champs de texte, que j'ai déja transformés en template, de mon GridView lors de la modificatio Retrouver un élément dans un gridview paginé [ par maXrez ] Bonjour, J'ai actuellement un gridview dans un updatepanel, ce qui me permet d'activer la pagination et de ne pas avoir de raffraichissement lorsque j figer le header d'un gridview scrollé [ par equinoxe83 ] Bonjour à tous !Je cherche une solution pour disposer d'un scoll vertical dans un gridview tout en conservant le header fixe. J'ai bien trouvé sur le Accès à un userControl depuis Repeater [ par YannVB ] Bonjour,je souhaite accéder à un UserControl contenu dans l'itemTemplate d'un Repeater de ma webform, de manière à alimenter dynamiquement les proprié Somme dans un gridview [ par benamb ] BonjourVoilà je voulais savoir s'il était possible de calculer la somme des champs (quantité) qui se trouve dans mon gridview.<table id="gv_cde_client ButtonField du GridView [ par tleon ] Bonjour,J'ai un gridView, contenant un ButtonField. Comment je peux recuperer le gridView.SelectedRow.RowIndex. au click du ButtonFieldMerci. GridView en asp.net 2005 [ par gentilkhalil ] Bonjour,j ai un probleme ce que je narrive pas a faire des modifications et suppressions sur un gridview avec un dataset sur asp.net 2005/code vb.net,


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,44 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.