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 :

[VB.Net] DataAdapter, Affichage si non null ??? [Débutant(e)]


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [VB.Net] DataAdapter, Affichage si non null ???
    Bonjour,

    Je suis débutante en .Net. J'utilise un DataAdapter et un DataGrid pour afficher des données provenant d'une requête SQL.

    J'aimerais afficher mes données, mais seulement si les champs ne sont pas null ou vide pour certains champs.

    J'ai passé au travers plusieurs livres de .Net mais aucun n'explique comment faire celà et je n'arrive pas à trouver ce genre d'informations ailleurs non plus. Je savais bien comment faire en ASP, mais en ASP.Net, là je suis un peu perdu.

    Donc, pour afficher mes données j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%# Container.DataItem("MonChamp") %><br/>
    Mais quelle est la méthode pour utiliser une condition dans mon code HTML?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <% 
          if MonChamp <> "" then 
               L'AFFICHER & <br/>
          end if
    %>
    Mais peut-être dois-je passer directement par le code dans le head et utiliser des balises asp:litteral ou quelque chose comme ça? Enfin, dans les 2 cas, je ne sais pas trop comment m'y prendre avec mon DataAdapter. Je veux dire que je sais comment le parcourir dans le HTML mais pas dans mon code directement...

    Enfin, j'espère que mes explications sont assez claire.

    Merci beaucoup,

    Sophy

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bon, j'ai essayé avec <asp:Literal>...

    Que ce soit avec un ou avec l'autre, les données ne s'affichent pas si elles sont nulles; mon vrai problème c'est que j'ajoute un <br/> pour changer de ligne par exemple et lorsque le champ est vide, je me retrouve avec une ligne vide.

    Par exemple; je cite des adresses. Certains ont une adresse Web et d'autres pas. Donc, je ne voudrais pas écrire:

    Site Web: "ET LAISSER CETTE ESPACE VIDE"

    Dans le cas où je n'ai pas d'adresse Web par exemple, je voudrais sauter cette ligne.

    Merci,

    Sophy

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Ne serait-il pas mieux que tu gères l'affichage des lignes dont le champs désiré ne soit pas vide directement dans ta requêtes SQL ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    J'aimerais bien, mais à ma connaissance, je ne peux pas faire une requête disant d'afficher un champ seulement des fois...

    Ma requête ne me retourne pas seulement un enregistrement, mais toute une série. Donc, des fois ce champ est null et des fois il ne l'est pas, dépendamment de l'enregistrement.

    Enfin, pour être bien claire, ce que je veux, c'est connaître cette valeur à savoir si elle est vide ou null afin d'éviter d'ajouter des retours à la ligne ou bien un titre inutile du genre: "Site Web: " & Null
    ________________________________________________________

    Pour ce qui est de l'objet asp:Literal, j'ai essayé d'en mettre un et de vérifier la valeur texte afin de le mettre invisible, mais mon objet n'est pas vu par mon code étant donné qu'il se trouve dans un datagrid.
    Voici ce que je veux dire:
    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
     
    <asp:DataGrid id="GridEnt" runat="server" 
      AutoGenerateColumns="False" 
      bordercolor="black" borderwidth="0"
      width="630" align="center" cellpadding="3"
      cellspacing="1" PageSize="5" showHeader="false"
      OnPageIndexChanged="Grid_Change"
      allowPaging="true" AllowCustomPaging="false"
      PagerStyle-HorizontalAlign="center">
     
      <HeaderStyle font-bold="True" forecolor="White" 
         backcolor="#486f95" cssClass="enteteAchat" 
         horizontalAlign="Center">
      </HeaderStyle>
     
      <PagerStyle mode="NumericPages" 
        forecolor="#FFFFFF" backcolor="#486f95"></PagerStyle>
     
      <Columns>
        <asp:TemplateColumn >
          <ItemTemplate>
            <table border = '0' width='630' align='center' cellpadding='5' 
               cellspacing='10'>
              <tr><td valign='top'>
               <b style='font-variant:small-caps;'>
               <%# Container.DataItem("NomEntreprise") %></b><br />
               <%# Container.DataItem("Adresse") %><br />
               <asp:Literal id="litBureau" runat="server" 
                EnableViewState="false"
                Text='<%# DataBinder.Eval(Container.DataItem, "Bureau") %>'>
               </asp:Literal>
               <asp:Literal id="litRetourBureau" runat="server"  
                 EnableViewState="false"><br/></asp:Literal>
     
               <%# Container.DataItem("Ville") %> (<%# Container.DataItem
                   ("Province") %>)<br />
               <%# Container.DataItem("Pays") %><br />
               <%# Left(Container.DataItem("CodePostal"), 3)%> <%# Right
                   (Container.DataItem("CodePostal"), 3)%> <br />
     
             </td><td valign='bottom'>
               Tél: (<%# Left(Container.DataItem("Telephone"), 3)%>) <%# 
                   Mid(Container.DataItem("Telephone"),4,3)%>-<%# 
                   Mid(Container.DataItem("Telephone"),7,4)%><br />
               Fax: (<%# Left(Container.DataItem("Fax"), 3)%>) <%# 
                   Mid(Container.DataItem("Fax"),4,3)%>-<%# 
                   Mid(Container.DataItem("Fax"),7,4)%><br />
               Courriel: <a href='mailto:<%# Container.DataItem("Courriel")
                 %> '> <%# Container.DataItem("Courriel")%> </a><br />
     
    <!-- ********* EN ASP ON FERAIT: **********
            <% if rs("SiteWeb") <> "" then %>	
    -->
               Site Web: <a href='<%# Container.DataItem("SiteWeb")%> ' 
                 target='blank'><%# Container.DataItem("SiteWeb")%> </a><br />
     
    <!--   
            <% end if %>	
    -->
              </td></tr>
            </table>
          </ItemTemplate>
        </asp:TemplateColumn>
      </Columns>
    </asp:datagrid>
    Il y a certainement un moyen hyper simple de faire ça!!! C'est juste que je ne le connais pas!

    Merci,

    Sophy

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Quelqu'un a une idée de la façon dont je dois faire?

    Merci beaucoup,

    Sophy

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    C'est quand même pas possible que je ne puisses faire une validation comme ça!

    Peut-être que je ne procède pas du tout de la bonne façon, alors peut-être quelqu'un pourrait me suggérer une piste ou m'indiquer un endroit où je pourrais tomber sur cette information? J'ai bien essayé de trouver, mais sans résultat.

    Merci,

    Sophy

  7. #7
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Ben le problème c'est que vu que tu utilise un datagid, t'as pas le choix, ou t'affiche tout, ou t'affiches rien.

    Il faut soit traiter ton dataset en amont (avant l'affichage dans le datagrid) avec un dataview, ou d'autres manips, soit tu "bidouilles" sur les couleur pour colorer en noir les cases non renseignés.

    Quand tu utilise un datagrid tu raisonne par colonne, lié à un champ, lié à un dataset. C'est ton dataset qui doit-être formatté par ton datagrid !

    Ou sinon tu peux utiliser le controle htmltable pour refaire ton tableau un peu comme tu fesais en asp

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Je ne connais pas ASPX mais je te dirai comme NEO.51.

    c'est a dire que tu crée un dataadapter avec ta requete sql, ensuite tu traites les informations du dataadapter pour enlever les lignes qui doivent dégager.

    Bon je fais du winform en vb.net mais j'effectue un traitement similaire au tien qui consiste a crée un dataset(ou dataadapter) avec la requete sql dont tu as besoin ensuite je crée un datatable temporaire qui recupere que les lignes dont j'ai besoin

    Je parcours mon dataset, je vérifie si la ligne m'interesse, si oui je l'envoi dans le datatbel, sinon et bien je fais rien.

    Bon j'espere t'avoir apporter un debut de reponse sachant que le nom des objets que j'utilise peut etre différent des tiens car je travaille avec une base sql server

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bon daccord... J'ai enlever le Datagrid et utilisé une DataTable à la place. Pour mes validations de champs null, ça règle effectivement mon problème MAIS, ça m'en cause un autre parcontre.

    Voilà: En utilisant plus le DataGrid, je ne peux plus contrôler mon affichage par page et comme j'ai plusieurs adresses à afficher, le défilement de la page est assez long.

    Voici un peu le genre d'affichage que je veux faire. Peut-être pourriez-vous m'indiquer quel est le meilleure moyen d'arriver à ce résultat.

    L'affichage ressemble à ça:

    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
    NOM ENTREPRISE 1                            
    Adresse
    Bureau XX (facultatif)                              Tél: (555) 555-5555
    Ville (Province)                                       Fax: (555) 555-5555
    Pays                                      (facultatif) courriel: email@entreprise1.com
    A5A 5A5                                 (facultatif) Site Web: www.entreprise1.com
     
    NOM ENTREPRISE 2                            
    Adresse
    Bureau XX (facultatif)                             Tél: (555) 555-5555
    Ville (Province)                                      Fax: (555) 555-5555
    Pays                                     (facultatif) courriel: email@entreprise2.com
    A5A 5A5                                (facultatif) Site Web: www.entreprise2.com
     
    ...
                                      ... 1 2 3 4 5 6 7 8 9 10 ...
    Donc, voilà, ce n'est pas un affichage dans une grille, quelques champs sont facultatif (le bureau, courriel et le site Web) et comme il il en a plusieurs a afficher, le mieux serait que ce soit sur plusieurs pages.

    Merci,

    Sophy

  10. #10
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    bon ben là ça devient plus complexe, dèja le datagrid t'oublis

    Je penserais plutot à un webusercontrol qui afficherait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NOM ENTREPRISE 1                            
    Adresse 
    Bureau XX (facultatif)                              Tél: (555) 555-5555 
    Ville (Province)                                       Fax: (555) 555-5555 
    Pays                                      (facultatif) courriel: email@entreprise1.com 
    A5A 5A5                                 (facultatif) Site Web: www.entreprise1.com
    et un repeater pour afficher toutes ces "fiches", mais bon là comme ça sur le forum c'est impossible de toutt expliquer

  11. #11
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 70
    Points
    70
    Par défaut Pourquoi pas un DataRepeater ?
    Personnellement j'utilise des DataRepeater ou des DataList beaucoup plus souples que les DataGrid.
    Si l'on veut choisir entre renvoyer quelque chose ou pas il suffit de créer une fonction qui renvoie le code html avec les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function RenvoiSiPasNull(ByVal Value as Object) as String
     if isdbnull(Value) = false then
       return "<tr><td>" & Value & "</td></tr>"
     end if
    end function
    Dans le htm on met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <asp:Repeater><ItemTemplate>
    <%# RenvoiSiPasNull(DataBinder.Eval(Container.DataItem, "Field")%>
    </ItemTemplate></asp:Repeater>
    Comme ca la ligne n'est renvoyée que si la valeur n'est pas nulle. Ca fait un peut bidouille mais ca permet d'ecrire ce qu'on veut ou on veut...
    On doit certainement pouvoir faire plus propre dans le code en Itérant la collection Items du DataReader dans le Code, mais il faut alors tout construire par le code...

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Avec les Datatable, DataRow et DataColumn, j'ai pas de problème pour mon affichage. Je boucle sur mes champs et les concatène dans un tableau; la concaténation finale dans un contrôle litéral.

    Je fais comme ceci (code un peu raccourci):
    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
    litContenu.Text &= "<table border = '0' width='630' align='center' cellpadding='5' cellspacing='10'>"
     
    For Each CurrentTable In myDataSet.Tables
       For Each CurrentRow In CurrentTable.Rows
          litContenu.Text &= "<tr><td valign='top'>"
          litContenu.Text &= "<b style='font-variant:small-caps;'>" & CurrentRow("NomEntreprise") & "</b><br />"
          litContenu.Text &= CurrentRow("Adresse") & "<br />"
          If Not (CurrentRow("Bureau") Is Nothing) Then
              If Not IsDbNull(CurrentRow("Bureau")) Then
                  litContenu.Text &= CurrentRow("Bureau") & "<br />"
              End if
           End if
     
           'ETC.
     
       Next
    Next
    litContenu.Text &= "</table>"
    et bien sûr mon contrôle litéral dans mon code html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Literal id="litContenu" runat="server" EnableViewState="false" />
    Ceci résout donc l'affichage ou pas des champs null mais pas ma numéroration des pages. Avec le datagrid, j'affichais également correctement et avec ma numérotation, mais le problème était au niveau des champs null.

    Donc, si je comprends bien, tu me suggère de reprendre mon 1er code avec DataAdapter et DataGrid et d'insérer la fonction "RenvoiSiPasNull"...

    Là où je ne suis pas sûr de suivre c'est la manière que je dois alors remplir mon DataAdapter.

    Enfin, je fais quelques petits tests et je te reviens là-dessus... et Merci!

    Sophy

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    WOW! C'est parfait ça. Je pensais bien qu'il y avait quelque chose de simple comme ça! C'est exactement ce dont j'avais besoin.

    MERCI erick et MERCI aux autres également. J'ai découvert pleins de trucs intéressants au travers tous ces tests!

    Vous savez que vous êtes tous géniaux??? J'ai bien hâte d'acquérir toute cette expérience moi aussi!

    Merci encore,

    Sophy

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

Discussions similaires

  1. [2K8] NON AFFICHAGE DES VALEURS NULLES
    Par MELIGEO dans le forum SSAS
    Réponses: 0
    Dernier message: 18/06/2010, 15h18
  2. [insertion]0 et non NULL pour un champ real
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 12/07/2005, 18h19
  3. return array vide et non null
    Par mereyj dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/04/2005, 20h25
  4. Réponses: 13
    Dernier message: 14/06/2004, 15h35
  5. [VB.NET] [ADO.NET] DataAdapter et concaténation
    Par master56 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/06/2004, 13h25

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