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 MVC Discussion :

Afficher des données de deux tables dans une vue [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Afficher des données de deux tables dans une vue
    Bonjour à tous,

    Toute mes excuses pour le dérangement mais je rencontre quelques soucis pour l'affichage de données dans une vue avec des informations se trouvant dans deux tables d'une base de données.

    J'ai deux tables :
    ° Patient : id_patient, nom_patient, prenom_patient
    ° Medicament : id_medicament, nom_medicament, date_prise_medicament, id_patient

    J'ai une vue qui affiche la liste des médicaments pour un patient :

    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
    70
    71
    72
    73
    @model IEnumerable<Nom_Application.Models.Medicament>
     
    @{
        ViewBag.Title = "Index";
    }
     
    <h2>Médicaments</h2>
     
    @{string PatientID = ""; string PatientNom = ""; string PatientPrenom = "";}
     
    @foreach (var item in Model){
        PatientID = item.id_patient;
        PatientNom = item.Patient.nom_patient;
        PatientPrenom = item.Patient.prenom_patient;
    }
     
    <div>
        <div class="form-horizontal">
            <hr />
            <fieldset class="fieldset fieldsetGrey">
                <h4>Médicaments du patient :</h4>
                <div class="form-group">
                    <div class="control-label col-md-2">
                        ID Patient
                    </div>
                    <div class="control-label col-md-4">
                        @Html.EditorFor(x => PatientID , new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })
                    </div>
                </div>       
                <div class="form-group">
                    <div class="control-label col-md-2">
                        Nom
                    </div>
                    <div class="col-md-4">
                        @Html.EditorFor(x => PatientNom, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })
                    </div>
                    <div class="control-label col-md-2">
                        Prénom
                    </div>
                    <div class="col-md-4">
                        @Html.EditorFor(x => PatientPrenom, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })                   
                    </div>
                </div>
            </fieldset>
        </div>
    </div>
     
    <table class="table">
        <tr>
            <th>
                Date
            </th>
            <th>
                Médicament
            </th>
        </tr>
     
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.date_prise_medicament)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.nom_medicament)
                </td>
            </tr>
        }
    </table>
     
    <div>
       @Html.ActionLink("<< Retour", "Details", "Patients", new { id = id_patient}, null)
    </div>
    Ainsi qu'un controller :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    using Nom_Application.Models;
     
    namespace Nom_Application.Controllers
    {
        public class MedicinesController : Controller
        {
            private Nom_ApplicationEntities db = new Nom_ApplicationEntities();
     
            // GET: Medicines
            public ActionResult Index(string id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
     
                var medicaments = from m in db.Medicaments
                                  where m.id_patient.Contains(id)
                                  select m;
     
                if (medicaments == null)
                {
                    return HttpNotFound();
                }
     
                medicaments = medicaments.OrderByDescending(medic => medic.date_prise_medicament);
     
                return View(medicaments);
            }
    Les données des deux tables s'affichent bien sauf si la liste medicament est vide. Le pourquoi est évident à comprendre... mais c'est le comment corriger qui me pose des soucis. Pourriez-vous me donner quelques pistes ?
    Un grand merci d'avance

  2. #2
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Je ne suis pas sur de comprendre ce que tu veux. Tu ne veux plus avoir le notfound lorsque la liste des médicaments est vide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if (medicaments == null)
                {
                    return HttpNotFound();
                }
    Ta façon de procéder n'est pas la meilleure, et cette boucle est carrément inutile, car il s'agit des médicaments du même patient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @foreach (var item in Model){
        PatientID = item.id_patient;
        PatientNom = item.Patient.nom_patient;
        PatientPrenom = item.Patient.prenom_patient;
    }
    En principe pour chaque patient, tu dois afficher la liste des médicaments et pour un patient qui n'a pas aucune prescription (liste médicaments vide), tu dois afficher la page avec les informations sur le patient et une liste vide pour les médicaments et non une erreur HttpNotFound.

    La meilleure approche est de remplacer dans ta vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @model IEnumerable<Nom_Application.Models.Medicament>
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @model Nom_Application.Models.Patient
    Concrètement, ça donne ceci :

    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
     
    @model Nom_Application.Models.Patient
     
    @{
        ViewBag.Title = "Index";
    }
     
    <h2>Médicaments</h2>
     
    <div>
        <div class="form-horizontal">
            <hr />
            <fieldset class="fieldset fieldsetGrey">
                <h4>Médicaments du patient :</h4>
                <div class="form-group">
                    <div class="control-label col-md-2">
                        ID Patient
                    </div>
                    <div class="control-label col-md-4">
                        @Html.EditorFor(x =>x.id_patient , new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })
                    </div>
                </div>       
                <div class="form-group">
                    <div class="control-label col-md-2">
                        Nom
                    </div>
                    <div class="col-md-4">
                        @Html.EditorFor(x => x.nom_patient, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })
                    </div>
                    <div class="control-label col-md-2">
                        Prénom
                    </div>
                    <div class="col-md-4">
                        @Html.EditorFor(x => x.prenom_patient, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly", disabled = "disabled" } })                   
                    </div>
                </div>
            </fieldset>
        </div>
    </div>
     
    <table class="table">
        <tr>
            <th>
                Date
            </th>
            <th>
                Médicament
            </th>
        </tr>
     
     
        @foreach (var item in Model.Medicaments)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.date_prise_medicament)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.nom_medicament)
                </td>
            </tr>
        }
    </table>
     
    <div>
       @Html.ActionLink("<< Retour", "Details", "Patients", new { id = id_patient}, null)
    </div>
    Dans ton contrôleur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      public ActionResult Index(string id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
     
                return View(db.Patients.Find(id));
            }
    Je crois que dans ta classe Patient de ton modèle, tu dois avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<Medicament> Medicaments { get; set; }
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

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

Discussions similaires

  1. [WD20E] Besoin d'aide pour afficher des données de l'arbre dans une table
    Par Guillaume Philippe dans le forum WinDev
    Réponses: 0
    Dernier message: 30/06/2016, 14h25
  2. Réponses: 0
    Dernier message: 21/03/2016, 10h17
  3. Réponses: 7
    Dernier message: 29/11/2013, 00h03
  4. Enregister des données sur deux tables dans une base Access
    Par aziz-be dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/09/2012, 11h46
  5. [MySQL] l'ajout Des Données de 3 tables dans une seule table apres validation
    Par sooprano dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/11/2008, 16h54

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