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 :

Comment Remplir un DropDownList avec le noms des colonnes d'une table [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut Comment Remplir un DropDownList avec le noms des colonnes d'une table
    Bonjour

    J'ai une table AGG_TREE qui contient les 4 colonnes suivante :

    "COL_AGG", "PARENT_CODE", "COEFFICIENT" et "DATE_CREATED"

    Ce que je ve faire : c'est de remplir et afficher un DropDownList avec les noms de ces colonnes ("COL_AGG", "PARENT_CODE", "COEFFICIENT" et "DATE_CREATED") et quand je sélectionne le nom d'une colonne, j'affiche ses données dans une view

    Merci pour votre aide

  2. #2
    Membre confirmé Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Points : 473
    Points
    473
    Par défaut
    Salut,

    J'ai déjà fait un bout de code similaire voilà comment j'ai procédé :

    Tout d'abord dans mon controleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public ActionResult MaDropDownList()
            {
     
                var response = myBUS.GetDatas();
                List<Datas> list = new List<Datas>();
                list = response.Data;
                ViewBag.DDL = new SelectList(list, "Id", "Name");            
     
                //J'avais utilisé ici une procédure stockée, et je remplis ma liste d'objets "Datas"
                return View();
            }
    Dans la vue maintenant :

    J'utilise un HTMLHelper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     @Html.DropDownList("Datas", (SelectList)ViewBag.DDL, new { @class="dropdown" })
    Grâce à ceci tu as des noms de colonnes dans ta dropdownlist

    tu peux le faire aussi en dur dans le code si tu as envie en créant toi même une selectList et en ajoutant des champs, mais si jamais les noms devaient changer avec ma méthode tu es tranquille.

    Après plus loin dans ta vue tu crées une div

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="result"></div>
    et tu ajoutes une petite fonction Javascript qui va détecter le changement de valeur dans ta dropdown :

    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
    $('#Datas').change(function () {
                    var value = $('#Datas).val();    
                    var url = dev + "/monController/MaDropDownList";
                    $.ajax({
                        url:url,
                        cache:false,
                        type:'POST',
                        data: {
                            Id: value                                                             
                        },
                        success: function (data)
                        {
                            $('#result').empty().append($(data).find('table'))
                        }
                    });
                })
    Une fois ceci réalisé tu retournes dans le controleur et cette fois tu refais ta fonction mais précédée d'un [HttpPost]

    Ce qui te donne :

    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
     
    [HttpPost]
            public ActionResult MaDropDownList(string Id)
            {
                try
                {
                    var reponse = myBus.GetDatas(Id)				
                    return View("Result", response.Data);
                }
                catch (Exception ex)
                {
                    ViewBag.Error = ex.Message;
                    return View();
                }
            }
    Maintenant sur cette ActionResult tu peux céer la vue partielle "Result" ou tu peux afficher le contenu de ta colonne ( l'idéal est de faire une vue fortement typée en mode "list")

    Si tu ne comprends pas n'hésites pas à poser des questions.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Bonjour Julien698

    Tout d'abord, je te remercie énormément pour ta réponse claire et détaillé

    STP, Peux-tu m'expliquer quelques points que je n'ai pas bien compris dans le code :

    1./ myBUS représente quoi au juste ? j'ai essayé de le remplacer par le nom de ma table (AGG_TREE) qui se trouve dans le dossier 'WebPortal.DataBase.IRH.AGG_TREE comme ceci !:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public ActionResult MaDropDownList()
            {
     
                var response = AGG_TREE.GetDatas();
                List<Datas> list = new List<Datas>();
                list = response.Data;
                ViewBag.DDL = new SelectList(list, "Id", "Name");            
     
                //J'avais utilisé ici une procédure stockée, et je remplis ma liste d'objets "Datas"
                return View();
            }
    et j'ai cette erreur : Error 'WebPortal.DataBase.IRH.AGG_TREE' does not contain a definition for 'GetDatas'

    et puis j'ai essayer de le remplacer aussi par le model contenant ma base de donnée db.AGG_TREE comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public ActionResult MaDropDownList()
            {
    private IrhMetaEntities db = new IrhMetaEntities();
                var response = db.AGG_TREE.GetDatas();
                List<Datas> list = new List<Datas>();
                list = response.Data;
                ViewBag.DDL = new SelectList(list, "Id", "Name");            
     
                //J'avais utilisé ici une procédure stockée, et je remplis ma liste d'objets "Datas"
                return View();
            }
    et j'ai aussi une erreur :


    Error 6 'System.Data.Objects.ObjectSet<WebPortal.DataBase.IRH.AGG_TREE>' does not contain a definition for 'GetDatas' and no extension method 'GetDatas' accepting a first argument of type 'System.Data.Objects.ObjectSet<WebPortal.DataBase.IRH.AGG_TREE>' could be found (are you missing a using directive or an assembly reference?)


    et j'ai une erreur sur le paramettre "data"

    Error 7 The type or namespace name 'Datas' could not be found (are you missing a using directive or an assembly reference?)


    Et puis question un peu bête : est ce que je suis obliger de remplir de "data" pour pouvoir afficher les noms des colonnes et si c'est oui y t-il un autre moyens (code C#) autre que procedure stocker pour le faire


    Merciiiii

    Merci par avance pour tes réponses

  4. #4
    Membre confirmé Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Points : 473
    Points
    473
    Par défaut
    C'est normal que ça compile pas il faut que tu fasses quand meme pas mal de changements :

    Pour myBus : En fait dans ce projet là je travaillais en plusieurs couches. Une couche DataLayer ou j'avais l'accès à mes données via des fichiers LINQ to SQL fichier.dbml ou Entity FrameWork .edmx.
    Et Dans mon Bus qui est en dessous du Datalayer j'appelais des methodes du datalayer pour ce que je voulais en particulier comme datas + je faisais la gestion des erreurs.
    Après tu n'es pas obligé de faire comme ça, tu peux directement dans ton code faire appel aux données sans passer par des couches.

    Tout d'abord quel type de SGBD tu utilises et comment fais-tu le lien ?

    Pour ton erreur GetDatas c'est normal aussi, on te dit qu'il n'est pas défini, mais c'est aussi spécifique à mon projet.

    Pour datas non tu n'es pas obligé de le remplir.

    Après les procédures sotckées ne sont pas obligatoires :

    Lis ce tuto tu verras un peut comment tu peux faire avec LINQ : http://dotnet.developpez.com/mvc/mvc-linq-to-sql/
    ou sinon avec Entity FrameWork : http://dotnet.developpez.com/mvc/mvc-entity-framework/

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    J'utilise Entity Framwork pour liaison avec mes données,

    Après avoir bien travailler .....je suis arrivé a avoir une liste dynamique contenant les noms des colonnes de ma table...voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       public ActionResult Index()
            {
              Type type = typeof(AGG_TREE); 
                   List<string> nameOfMycolumns = type.GetProperties()
                             .Where(
                                 prop => prop.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false).Any() &&
                                 !prop.GetCustomAttributes(typeof(EdmRelationshipNavigationPropertyAttribute), false).Any())
                             .Select(prop => prop.Name).ToList();
     
                   ViewBag.NameOfMycolumns = nameOfMycolumns;
     
                  return View();
            }

    et je les affiche dans une liste déroulante de ma vue comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div>
    <select name="NameOfMycolumns">
    @foreach (var item in ViewBag.NameOfMycolumns)
    {
    <option>@item</option> 
    } 
    </select>
     
    </div>

    Mais je tiens a remercier Julien698 d'avoir pris un peu de son temps pour me répondre !

    Cordialement

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

Discussions similaires

  1. [Doctrine] Afficher le nom des colonnes d'une table avec doctrine
    Par darkcrift dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/05/2013, 11h19
  2. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  3. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  4. Réponses: 2
    Dernier message: 01/08/2006, 13h38
  5. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14

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