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

ASP.NET Discussion :

Gridview et connexion à une table crée dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Gridview et connexion à une table crée dynamiquement
    Bonsoir et d'avance merci à tous,

    je crée une table dynamiquement de la façon suivante (j'ai simplifié) :
    en sachant que "mesInfos" est un tableau alimenté par ailleurs et que
    "maGrid" ne contient qu'une seule colonne de type Templatefield.

    ci-joint du code afin de bien me faire comprendre car il n'est pas simple d'expliquer
    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
     
    Dim MonDataset As DataSet = New DataSet()
    Dim table1 As DataTable = MonDataset.Tables.Add("Matable")
    Dim column As DataColumn = table1.Columns.Add("MaColonne", 
    System.Type.GetType("System.String"))
    Dim row As DataRow
    Dim i As Integer
    For i = 0 To mesInfos.Length - 1
                 row = table1.NewRow()
                 row("MaColonne") = mesInfos(i)
                 table1.Rows.Add(row)
    Next i
    MaGrid.DataSource = MonDataset.Tables("Matable")
    MaGrid.DataMember = "MaColonne"
    MaGrid.DataBind()
    Par exemple si j'ai 4 lignes dans ma table ==> "magrid" affiche bien 4 lignes,
    si j'ai 12 lignes dans ma table ==> "magrid" affiche bien 12 lignes mais la
    colonne m'affiche tout le temps "System.data.datarowview" pour chaque ligne.

    Je sais que je pourrais faire directement MaGrid.DataSource = mesInfos (et
    ça marche) mais ce n'est pas ce que je veux car là c'est pour l'exemple que
    j'ai utilisé un tableau qui alimente une table crée dynamiquement (mais dans
    mon programme d'origine c'est autrement que je l'alimente et je n'ai pas la
    place pour tout écrire, c'est juste pour évoquer mon problème que j'utilise
    un tableau).

    J'ai essayé avec MaGrid.DataMember = "aaa" pour voir et j'obtiens le même
    résultat donc je pense que c'est de ce côté que je bugue.
    Même chose si je ne renseigne pas du tout MaGrid.DataMember.
    Donc ma question est : comment obtenir pour chaque ligne de MaGrid le contenu de la
    colonne "MaColonne" ?

    merci de m'expliquer où je me plante.

  2. #2
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    tu dois utiliser soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaGrid.DataSource = MonDataset
    MaGrid.DataMember = "MaColonne"
    MaGrid.DataBind()

    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaGrid.DataSource = MonDataset.Tables("Matable")
    MaGrid.DataBind()

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Hélas ça ne marche pas
    Merci pour la réponse

    mais dans le 1er cas j'obtiens l'erreur : Le IListSource utilisé ne contient pas une source de données appelée 'MaColonne'. Vérifiez votre valeur DataMember.
    et dans le 2ème cas que j'avais déjà essayé (et mis dans ma demande) la colonne m'affiche tout le temps "System.data.datarowview" pour chaque ligne.

    Auriez-vous une autre idée ?

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Fais voir ton datagrid

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Gridview
    Bonsoir,

    voici le code de la gridview, y a pas plus simple :

    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
     
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="GestionDesOutils.aspx.vb" Inherits="GestionDesOutils" %>
     
    <!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 runat="server">
        <title>Page sans titre</title>
    </head>
    <body>
        <form id="form1" runat="server">
             <asp:GridView ID="UsersInRoleGrid" runat="server" AutoGenerateColumns="False" CellPadding="4"
                    ForeColor="#333333" GridLines="None" 
                    Width="352px" Height="150px">
             <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                 <Columns>
                    <asp:TemplateField HeaderText="Nom d'Utilisateur">
                        <ItemTemplate>
                            <%# Container.DataItem.ToString() %>
                        </ItemTemplate>
                    </asp:TemplateField>
                 </Columns>
                <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <AlternatingRowStyle BackColor="White" />
             </asp:GridView>
        </form>
    </body>
    </html>
    et le résultat visuel en pièce jointe

    12 lignes avec 12 éléments dans la table, si 8 éléments 8 lignes pareilles, etc.
    j'ai vérifié en faisant une boucle pour balayer la table et chaque ligne du Dataset contient bien une donnée dans la colonne "MaColonne".
    D'ailleurs si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim MesInfos(3) As String
            MesInfos(0) = "0"
            MesInfos(1) = "1"
            MesInfos(2) = "2"
            MesInfos(3) = "3"
    UsersInRoleGrid.DataSource =MesInfos
    UsersInRoleGrid.DataBind()
    cela marche bien, voir 2ème visuel, mais dès que je passe par le Dataset plus rien sauf le nombre de ligne qui est correct !!!


    Cela fait une journée que je suis dessus et je n'arrive toujours pas à trouver où je me plante, pourtant avec une colonne unique j'ai vraiment honte

    Il doit y avoir un truc qui m'échappe mais je n'arrive pas à le cerner, si quelqu'un pouvait m'expliquer où est mon erreur ?

    D'avance merci beaucoup
    Images attachées Images attachées   

  6. #6
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    <asp:TemplateField HeaderText="Nom d'Utilisateur">
                        <ItemTemplate>
                            <asp:Label id="label1" runat="server" Text='<%# Eval("Macolonne") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
    Essaie ça

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Je comprends pas l'interet d'un TemplateField pour un usage aussi simple?

  8. #8
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Gridview suite
    Merci bossun,

    cela fonctionne parfaitement, mais encore 2 questions :

    1°) pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <asp:Label id="label1" runat="server" Text='<%# Eval("Macolonne") %>' />
    (où puis-je trouver des infos sur la notion d'Eval)

    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <%# Container.DataItem.ToString() %>
    2°) la pagination ne fonctionne pas, où puis-je trouver un exemple de gestion du "PageIndexChanging" pour ce cas où "Si la source de données ne prend pas directement en charge la pagination et n'implémente pas l'interface ICollection, le contrôle GridView ne peut pas effectuer de pagination." comme l'explique Microsoft dans "Pagination dans un contrôle serveur Web GridView". Je ne sais comment m'y prendre, dois-je récupérer le numéro de page et en fonction du "PageSize" refaire une requête ?
    Ou alors est-il possible d'implémenter l'interface ICollection dans ma source de donnée ?

    Merci pour l'aide

  9. #9
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut "Je comprends pas l'interet d'un TemplateField pour un usage aussi simple?"
    lutecefalco,

    j'ai simplifié au maximum pour la facilité de compréhension de mon problème, le programme est bien sûr plus complexe et donc retiré du contexte cela semble simpliste.
    Je ne suis pas expert en asp.net car j'ai toujours utilisé des winforms et non des webforms, je n'ai pas les moyens de me payer des cours donc j'utilise les cours gratuits du site de Microsoft, les webcasts et autres docs mais dès que l'on commence à utliser des éléments plus complexes il ne reste que la doc et pour atteindre les exemples il faut déjà cerner le problème d'où ma question à bossun. Je ne veux pas faire des copier/coller mais comprendre car c'est comme cela que l'on progresse.
    Pour un pro cela semble simpliste voir trivial mais pour un débutant ...

    Attention : mes propos ne sont pas agressifs (ce qui le semble au premier abord) mais j'ai dit cela pour remettre dans le contexte, de plus je passe des nuits pour apprendre mais entre le travail et le manque de sommeil je suis épuisé.

    Peut-être connaissez-vous des cours gratuits ou très peu chers car j'ai connu des jours meilleurs.

    D'avance merci

  10. #10
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Perso, j'apprends tout via les sites de microsoft.
    Pour la pagination:
    - faut mettre allowpaging = true dans ton gridview
    - dans le code behind faut intercepter l'evt OnIndexPageChanging et setter la valeur de PageIndex du gridview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gridview.PageIndex = e.NewPageIndex
    gridview.datasource = ta_datasource
    gridview.databind()

  11. #11
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Gridview suite...
    Merci lutecefalco,

    cela résout tout à fait le problème.

    Juste quelques petites questions supplémentaire pour ma compréhension :

    1°) dans le code suivant :
    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
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default3.aspx.vb" Inherits="Default3" %>
     
    <!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 runat="server">
        <title>Page sans titre</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="ButtonSansClick" />
            <asp:Button ID="Button2" runat="server" Text="ButtonAvecClick" />
        </div>
        </form>
    </body>
    </html>
     
    et dans le code VB
     
    Partial Class Default3
        Inherits System.Web.UI.Page
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            MsgBox("Page_Load")
        End Sub
     
        Protected Sub Button1_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox("Button1_OnClick")
        End Sub
     
        Protected Sub Button2_OnClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox("Button2_OnClick")
        End Sub
     
    End Class
    que je clique sur le bouton 1 ou 2 j'ai comme message "Page_Load" puis "Button1_OnClick" ou "Page_Load" puis "Button2_OnClick"

    mais si dans le code j'ajoute uniquement OnClick="Button2_OnClick" c'est à dire maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button2" runat="server"  Text="ButtonAvecClick"  OnClick="Button2_OnClick"/>
    je clique sur le bouton 1 j'ai comme message "Page_Load" puis "Button1_OnClick"
    je clique sur le bouton 2 j'ai comme message "Page_Load" puis "Button2_OnClick" puis "Button2_OnClick", soit 2 fois le message, pourquoi ?

    2°) 1°) pourquoi
    Code :
    <asp:Label id="label1" runat="server" Text='<%# Eval("Macolonne") %>' /> (où puis-je trouver des infos sur la notion d'Eval)

    et non
    Code :
    <%# Container.DataItem.ToString() %>

    3°) avez-vous des liens (même en anglais) sur des tutoriaux vidéos ou papier sur ASP.NET VB.

    et encore merci

  12. #12
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut 1ère question résolue
    Pour la première question il faut choisir :

    soit on met OnClick="Button2_OnClick" mais pas de Handles Button2.Click

    ou on ne met pas OnClick="Button2_OnClick" mais on ajoute le Handles Button2.Click.

    C'est ma déformation de Winformeur qui me fait ajouter instinctivement le handles afin que cela fonctionne.

    Ouf reste la question 2 et 3

Discussions similaires

  1. [AJAX] Enlever le champ d'une table crée dynamiquement
    Par jean christophe dans le forum AJAX
    Réponses: 2
    Dernier message: 09/02/2011, 12h58
  2. Réponses: 5
    Dernier message: 08/03/2006, 03h42
  3. [ezPDF] Fonction addImage : insérer une image créée dynamiquement
    Par Huntress dans le forum Bibliothèques et frameworks
    Réponses: 37
    Dernier message: 29/11/2005, 11h20
  4. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 17h22
  5. Problèmes avec une TForm créée dynamiquement
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/03/2005, 11h55

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