IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[WEB] Afficher un gridview dans un contrôle utilisateur


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut [WEB] Afficher un gridview dans un contrôle utilisateur
    Bonjour,

    Je me heurte à un problème de génération d'un GridView.
    En effet, je dispose d'un gridView qui est lié à une base de donnée et donc à une requête. Cette requête a besoin de 3 paramètres pour renvoyer le résultat escompté.
    Seulement, ce gridview est placé dans un Contrôle utilisateur et je ne sais pas comment faire en sorte qu'il me renvoie le résultat car je n'arrive pas à lui donner les valeurs des paramètres. Le contrôle utilisateur est bien affiché mais je n'ai pas le gridview étant donné que pour lui, cette requête ne renvoie pas de données (la requête fonctionne : vérifié)
    Donc voici le code design de mon Contrôle utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <%@ Control Language="VB" 
                AutoEventWireup="false" 
                ClassName="CtrlStat" 
                CodeFile="CtrlStat.ascx.vb" 
                Inherits="CtrlStat" %>
    <asp:Table ID="tblInfo" runat="server">
        <asp:TableRow>
            <asp:TableCell Width="80">Utilisateur : </asp:TableCell>
            <asp:TableCell ID="CellUtilisateur" Width="250"></asp:TableCell>
            <asp:TableCell Width="165">Nombre de demandes : </asp:TableCell>
            <asp:TableCell ID="CellNbDemandes"  Width="250"></asp:TableCell>
        </asp:TableRow>
    </asp:Table>
    <asp:GridView ID="GVListeDemandes" runat="server" AutoGenerateColumns="False" 
        DataSourceID="ADSListeDemandes" Width="753px">
        <Columns>
            <asp:BoundField DataField="DEMId" HeaderText="Numéro demande" 
                SortExpression="DEMId" />
            <asp:BoundField DataField="DEMTitre" HeaderText="Titre demande" 
                SortExpression="DEMTitre" />
            <asp:BoundField DataField="TYPINTERLibelle" HeaderText="Type intervention" 
                SortExpression="TYPINTERLibelle" />
            <asp:BoundField DataField="DEMDate" DataFormatString="{0:dd/MM/yyyy}" 
                HeaderText="Date demande" SortExpression="DEMDate" />
        </Columns>
    </asp:GridView>
    <asp:AccessDataSource ID="ADSListeDemandes" runat="server" 
        DataFile="~/App_Data/IncidentENSAM.mdb" 
        SelectCommand="SELECT DEMANDE.DEMId, DEMANDE.DEMTitre, TYPEINTERVENTION.TYPINTERLibelle, DEMANDE.DEMDate FROM (DEMANDE INNER JOIN TYPEINTERVENTION ON DEMANDE.DEMTypeIntervention = TYPEINTERVENTION.TYPINTERId) WHERE DEMDate BETWEEN FORMAT(#?#,'mm/dd/yyyy') AND FORMAT(#?#,'mm/dd/yyyy') AND DEMUtilisateur=?">
        <SelectParameters>
            <asp:Parameter Name="?" DefaultValue="<% Response.Write(s_DateDebut) %>"/>
            <asp:Parameter Name="?" DefaultValue="<% Response.Write(s_DateFin) %>" />
            <asp:Parameter Name="?" DefaultValue="<% Response.Write(s_Utilisateur) %>" />
        </SelectParameters>
    </asp:AccessDataSource>
    Le code Behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Imports System.DirectoryServices
    Imports System.Web.Configuration
    Imports System.Data.OleDb
    Partial Class CtrlStat
        Inherits System.Web.UI.UserControl
     
        Protected s_Utilisateur, s_DateDebut, s_DateFin As String
        Private o_SI As SI
     
        Public Sub New()
     
        End Sub
     
        Protected Sub Initialisation(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
     
            If o_SI.Connexion.State = Data.ConnectionState.Closed Then o_SI.Connexion.Open()
     
            Dim o_Exec As OleDbCommand
            Dim s_requete As String
            s_requete = "SELECT COUNT(*) "
            s_requete = s_requete & "FROM (DEMANDE INNER JOIN TYPEINTERVENTION ON DEMANDE.DEMTypeIntervention = TYPEINTERVENTION.TYPINTERId) "
            s_requete = s_requete & "WHERE DEMDate BETWEEN FORMAT(#" & s_DateDebut & "#,""mm/dd/yyyy"") AND FORMAT(#" & s_DateFin & "#,""mm/dd/yyyy"") "
            s_requete = s_requete & "AND (DEMANDE.DEMUtilisateur = '" & s_Utilisateur & "')"
     
            o_Exec = New OleDbCommand(s_requete, o_SI.Connexion)
            Dim o_AD As New ActiveDirectory(WebConfigurationManager.AppSettings("ActiveDirectoryServeur"), _
                                            WebConfigurationManager.AppSettings("ActiveDirectoryLogin"), _
                                            WebConfigurationManager.AppSettings("ActiveDirectoryPassword"))
     
            CellUtilisateur.Text = String.Concat(o_AD.NomComplet(s_Utilisateur), " (", s_Utilisateur, ")")
            CellNbDemandes.Text = o_Exec.ExecuteScalar
        End Sub
     
        Public Property Utilisateur() As String
            Get
                Return s_Utilisateur
            End Get
            Set(ByVal value As String)
                s_Utilisateur = value
            End Set
        End Property
     
        Public Property DateDebut() As String
            Get
                Return s_DateDebut
            End Get
            Set(ByVal value As String)
                s_DateDebut = value
            End Set
        End Property
     
        Public Property DateFin() As String
            Get
                Return s_DateFin
            End Get
            Set(ByVal value As String)
                s_DateFin = value
            End Set
        End Property
     
        Public Property SI() As SI
            Get
                Return o_SI
            End Get
            Set(ByVal value As SI)
                o_SI = value
            End Set
        End Property
    End Class
    Et comment je l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    s_Requete = "SELECT COUNT(*) FROM (SELECT DISTINCT DEMUtilisateur FROM DEMANDE WHERE DEMDate BETWEEN FORMAT(#" & s_DateDeb & "#,""mm/dd/yyyy"") AND FORMAT(#" & s_DateFin & "#,""mm/dd/yyyy"") GROUP BY DEMUtilisateur)"
                        o_Exec.CommandText = s_Requete
                        i_NbUtilisateurs = CInt(o_Exec.ExecuteScalar)
     
                        s_Requete = "SELECT DISTINCT DEMUtilisateur FROM DEMANDE WHERE DEMDate BETWEEN FORMAT(#" & s_DateDeb & "#,""mm/dd/yyyy"") AND FORMAT(#" & s_DateFin & "#,""mm/dd/yyyy"")"
                        o_Exec.CommandText = s_Requete
                        Dim RDRUtilisateur As OleDbDataReader
                        RDRUtilisateur = o_Exec.ExecuteReader
     
                        ' On remplit les labels
                        lblNombreDemandes.Text = i_NbDemandes
                        lblNombreUtilisateur.Text = i_NbUtilisateurs
                        lblDateDebut.Text = s_DateDeb
                        lblDateFin.Text = s_DateFin
     
                        ' On parcours les utilisateurs
                        While RDRUtilisateur.Read
     
                            Dim o_Stat As New CtrlStat
                            o_Stat = o_Stat.LoadControl("~/Controls/CtrlStat.ascx")
                            o_Stat.SI = o_SI
                            o_Stat.Utilisateur = RDRUtilisateur.GetString(0)
                            o_Stat.DateDebut = s_DateDeb
                            o_Stat.DateFin = s_DateFin
     
                            PHStats.Controls.Add(o_Stat)
                        End While
    Cela fait plusieurs fois que je me heurte à ce type de problème et je n'ai, pour le moment, toujours pas trouvé de solution malgré le fait d'avoir cherché pendant plusieurs heures.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je pense que le plus simple serait de t'abonner à l'évènement Selecting de la AccessDataSource, pour renseigner les valeurs des paramètres avant que la requête soit exécutée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ADSListeDemandes(ByVal sender As Object, ByVal e As SqlDataSourceSelectingEventArgs)
     
        e.Command.Parameters("Utilisateur").Value = Me.Utilisateur
        e.Command.Parameters("DateDebut").Value = Me.DateDebut
        e.Command.Parameters("DateFin").Value = Me.DateFin
     
    End Sub
    Par contre, il faudrait modifier un peu la requête et la déclaration des paramètres :
    - Les paramètres (asp:Parameter) doivent avoir des noms (même si dans la requête c'est juste "?") et il faut préciser leur type (au moins pour les dates)
    - il ne faut pas formater les dates mais les passer telles quelles, comme des paramètres de type DateTime. ADO.NET se chargera de les transmettre à la BDD sous la forme qui convient. D'ailleurs, tes propriétés DateDebut et DateFin devraient être de type DateTime et non String

    Ton AccessDataSource devient donc quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <asp:AccessDataSource ID="ADSListeDemandes" runat="server" 
        DataFile="~/App_Data/IncidentENSAM.mdb" 
        SelectCommand="SELECT DEMANDE.DEMId, DEMANDE.DEMTitre, TYPEINTERVENTION.TYPINTERLibelle, DEMANDE.DEMDate FROM (DEMANDE INNER JOIN TYPEINTERVENTION ON DEMANDE.DEMTypeIntervention = TYPEINTERVENTION.TYPINTERId) WHERE DEMDate BETWEEN ? AND ? AND DEMUtilisateur=?">
        <SelectParameters>
            <asp:Parameter Name="Utilisateur" DbType="String" />
            <asp:Parameter Name="DateDebut" DbType="DateTime" />
            <asp:Parameter Name="DateFin" DbType="DateTime" />
        </SelectParameters>
    </asp:AccessDataSource>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci bien.
    Cela fonctionne parfaitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DropDownList dans un contrôle utilisateur
    Par Invité dans le forum ASP.NET
    Réponses: 6
    Dernier message: 03/03/2010, 16h31
  2. [AC-2007] afficher les chemins dans un contrôle
    Par fred75 dans le forum IHM
    Réponses: 5
    Dernier message: 19/06/2009, 15h01
  3. Réponses: 3
    Dernier message: 24/04/2009, 09h01
  4. Réponses: 3
    Dernier message: 21/11/2008, 13h02
  5. Réponses: 0
    Dernier message: 04/05/2008, 23h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo