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 :

Charger une dataTable avec une Enum


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Charger une dataTable avec une Enum
    Bonjour tout le monde.

    Je voudrais mettre en place une CheckBoxList qui affiche les jour de la semaine.
    Pour cela je mets ça côté HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:CheckBoxList ID="cblJour" runat="server" RepeatColumns="3" RepeatDirection="Horizontal"></asp:CheckBoxList>
    Côté CodeBehind je voudrais charger une dataTable pour la mettre en DataSource de la CheckBoxList. Donc j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Dim dtJour As DataTable
            dtJour.Columns.Add("JValue")
            dtJour.Columns.Add("JTexte")
    'ici
            cblJour.DataSource = dtJour
    Et maintenant je cherche le code que je pourrais mettre "ici" sauf que je sèche. Je pense qu'il faut faire un For Each sur l'Enum des jours de la semaine (DayOfWeek) et faire un dtJour.Row.Add mais je trouve pas la syntaxe.

    Alors soit je fais fausse route et vous connaissez un moyen plus simple, soit vous connaissez le moyen de faire ce For Each.

    Dans tous les cas, merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Le plus simple à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dtJour.DataSource = Enum.GetNames(typeof(TonTypeEnum))
    En espérant t'avoir aidé.

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide

    Premier souci : dtJour ne prends pas la propriété DataSource. Donc j'ai remplacé par cblJour (la CheckBoxList)

    Deuxième souci : Enum me dit "ExpresionAttendue" et là, je comprends pas parce que je ne maitrise pas les énumérations.

    Aurais tu une idée ?

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Premier souci : dtJour ne prends pas la propriété DataSource. Donc j'ai remplacé par cblJour (la CheckBoxList)
    Ca va de soi quand même . J'ai copié-collé sans faire attention que c'était ta DataTable et non ta DropDownList, mais accorde moi au moins le mérite de savoir cela

    Citation Envoyé par zooffy Voir le message
    Deuxième souci : Enum me dit "ExpresionAttendue" et là, je comprends pas parce que je ne maitrise pas les énumérations.
    Je vois pas trop où est le problème..

    Si je fais ceci, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string[] names = Enum.GetNames(typeof(DayOfWeek)); //tableau des noms
    int[] values = (int[])Enum.GetValues(typeof(DayOfWeek));   //tableau des valeurs
    Quel est le type Enum que tu utilises ?

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par Nicolas Esprit Voir le message
    Ca va de soi quand même . J'ai copié-collé sans faire attention que c'était ta DataTable et non ta DropDownList, mais accorde moi au moins le mérite de savoir cela
    Mais oui, pas de blème, j'avasi bien capté, hi hi .

    Citation Envoyé par Nicolas Esprit Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string[] names = Enum.GetNames(typeof(DayOfWeek)); //tableau des noms
    int[] values = (int[])Enum.GetValues(typeof(DayOfWeek));   //tableau des valeurs
    Quel est le type Enum que tu utilises ?
    Est ce que, par hasard ce que tu écris en C# ne serait pas valable en VB ?
    Parce que en faisant cela (qui doit être la même chose) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim s As  string() = [Enum].GetNames(TypeOf(DayOfWeek))
    il veut que je mette un "Is" à la fin, mas je vois pas trop ce qu'il veut précisément. Je sais qu'il y a des différences sur les Enumérations entre C# et VB

    Donc si je suis ton raisonnement tu veux faire un tableau à deux colonnes pour en faire la DataSource de la CBL. Cela solutionnerait d'un seul coup ma problématique entière. Parce que, à terme, faut que j'envoi des libellé de jour selon une langue choisie, mais que les valeurs restent en anglais litéral.

    Sauf que je ne sais pas bien manipuler les tableaux.

    Vois tu ?

  6. #6
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    J'ai écris en C# car j'utilise toujours le C#, la syntaxe est différente en VB mais le principe est le même. Ca te renvoit un tableau de string.

    Je ne veux pas faire de tableau à deux colonnes, je réponds juste à ta question sur comment parser un type Enum en DataSource. Tu n'as pas besoin d'avoir d'id vu que tu peux convertir un string (genre "Saturday") en sa correspondance dans DaysOfWeek.

    Enfin, si tu ne sais pas bien manipuler les tableaux, je crois qu'il faut commencer par le commencement et lire un tuto sur le C# avant de vouloir faire une application complexe non ?

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim dtJour As DataTable = New DataTable()
            dtJour.Columns.Add("JValue")
            dtJour.Columns.Add("JTexte")
     
            For Each ...
                Dim row As DataRow = dtJour.NewRow()
                row("JValue") = "taValue"
                row("JTexte") = "tonTexte"
                dtJour.Rows.Add(row)
            Next

  8. #8
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    On peut faire au plus simple comme ça, à la rigueur...

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci les gars.

    Alors, lire un tuto sur le C#, ouaip, déjà fait et pas trés utile vu que je programme tout en VB ! hi hi hi

    Maintenant, syntaxe différentes, c'est sûr, mais là il me pose une colle. Visiblement il veut un index aprés le type et je vois pas comment lui envoyer ça alors que, justement, je ne connais pas l'index à ce moment du code.

    En fait c'est le tableau qui me pose pas mal de souci de compréhension et j'avoue que, par souci de faiclité, j'évite de les utiliser, du coup, je progresse pas sur leur compréhension.

    Dans ton code, Lutelfalco, ce qui me manque c'est ce qu'il y a à la place des 3 petits points. C'est précisément là que ce trouve mon problème, le reste je sais faire.

    Je suppose que le For Each a se faire sur un taleau ou une énumération qui va contenir les Value et les Text. Donc toute la question est de récupérer la liste des jours selon les différentes langues disponibles.

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For Each d As String In [Enum].GetNames(GetType(DayOfWeek))
                Dim row As DataRow = dtJour.NewRow()
                row("JValue") = d
                row("JTexte") = "taTraduction"
                dtJour.Rows.Add(row)
            Next

  11. #11
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton code. ça marche bien, dans l'absolu, c'est à dire pas de bug.

    Mais la value qu'il me colle pour chaque value est : System.Data.DataRowView

    J'ai cherché ce que je pouvais faire de d, par exemple l'envoyer dans un index ou le convertir en type de quelquechose, mais je trouve rien qui marche.

    Vois tu le souci ?

  12. #12
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Doit y avoir un soucis. En suivant le lien de Nicolas j'ai essayé de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Enum].GetName(GetType(DayOfWeek), 0)
    Et ça me renvoi aussi
    System.Data.DataRowView
    Alors que ça devrait me renvoyer "Sunday".

    Je comprends pas et surtout, je vois pas où chercher.

  13. #13
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Peux-tu poster exactement le code que tu utilises ?

    Car ça ne peux renvoyer autre chose qu'un string ou lever une Exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Shared Function GetName ( _
        enumType As Type, _
        value As Object _
    ) As String

  14. #14
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ben c'est ça qui m'inquiète.

    Alors dans le CodeBehind je mets ça dans le Init de mon composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim dtJour As New DataTable
            dtJour.Columns.Add("JValue")
            dtJour.Columns.Add("JTexte")
     
            For Each d As String In [Enum].GetNames(GetType(DayOfWeek))
                Dim row As DataRow = dtJour.NewRow()
                row("JValue") = d
                row("JTexte") = [Enum].GetName(GetType(DayOfWeek), 0)
                dtJour.Rows.Add(row)
            Next
     
            cblJour.DataSource = dtJour
            cblJour.DataBind()
    Et côté HTML tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:CheckBoxList ID="cblJour" runat="server" RepeatColumns="3" RepeatDirection="Horizontal"></asp:CheckBoxList>
    qui se trouve dans une cellule d'une table, rien de plus.

  15. #15
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Tu as mis un breakpoint sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Enum].GetName(GetType(DayOfWeek), 0)
    Pour voir quelle est la valeur retournée ? Ca va te renvoyer toujours le même jour...


    Sinon, il te faut spécifier le DataTextField et DataValueField à ton DropDownList (dans ton cas et respectivement : "JTexte" et "JValue")

  16. #16
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Non, j'ai pas mis de breakpoint. j'ai pas besoins, je vois à l'écran la valeur que ça me retourne.

    Je sais aussi que ça va me retourner toujours la même chose. Justement, c'est pour tester au moins sur un jour donné.
    ça devrait me mettre "Sunday" partout. Mais ça me mets "System.Data.DataRowView " à la place.

    L'avantage de metre un DataSource sur une CheckBoxList est jsutment dene pas avoir à spécifier le Value et le Text. ça prend automatiquement le premier champ de la DataTable pour le Value et le deuxième pour le Text.
    C'est valable pour les DropDownList et les RadioButtonList aussi.

    Mais mon souci n'est pas là. Mon souci est de comprendre pourquoi là ou je devrais avoir le nom d'un jour de la semaine, j'ai un type d'objet qui est retourné.
    Et surtout pourquoi, en faisant la même chose qu'un exemple de la MSDN j'ai un autre résultat qu'eux.

  17. #17
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Mouais... mais si tu poses une question, qu'on te donne la réponse et que tu réponds "nan c'est pas ça".... ça va pas le faire

    Ta DataSource est une collection de Rows. Quand ta DropDownList appelle DataItem.ToString() pour afficher en texte la valeur, tu as le type qui est retourné, soit : "System.Data.DataRowView"...

  18. #18
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Autant pour moi, en précisant le DataTextField et le DataValueFiled, ça marche mieux !!!

    Pourtant j'ai programmé un outillage pour remplir des listes dans tous les sens et je spécifiais pas ces trucs là.

    Bon, maintenant ça marche, me reste plus qu'à trouver le moyen de traduire à la volée selon la culture et je sèche tout autant.

    Une idée peut-être ?

  19. #19
    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
    Par défaut
    Fichier de ressources & co

  20. #20
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ouah, c'est chiant ça !

    En passant par la culture, y pas des énumérations ?
    Genre, avec le "d" je lui passe ça en paramettre et il me ressort le nom du jour dans la culture que je lui spécifie ?

    L'ennui c'est que j'ai encore relu la MSDN sur la Culture, mais y en a dans tous les sens, et je suis un poil paumé. A la base ça à l'air vachement bien, mais c'est super compliqué, en fait.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Comment Charger une DataTable avec une requete
    Par waouni dans le forum Visual Studio
    Réponses: 0
    Dernier message: 13/10/2012, 17h38
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Réponses: 5
    Dernier message: 23/03/2008, 08h21

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