Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème entre une BDD SQL et une app WPF

Sujet résolu
Anonyme
    27 mai 2019 à 13:07:23

    Bonjour à tous !

    J'ai un TP Noté à rendre demain et je vous explique brièvement le problème :

    Je dois créer une application Windows en WPF, C# et avec une base de donnée SQL pour demain, et j'ai un gros problème : il y a un ListView qui est censé afficher la liste des élèves, avec leur nom et prénom, sauf que c'est avec ça que j'ai un problème :

    Voici le code :

    Code du MainWindow.xaml :

    Ici le ListView du Groupe marche

            <ListView x:Name="listviewGroupes" HorizontalAlignment="Left" Height="134" Margin="46,43,0,0" VerticalAlignment="Top" Width="147" Grid.RowSpan="2">
                <ListView.View>
                    <GridView>
                        <GridViewColumn CellTemplate="{StaticResource caseACocher}" Width="30"/>
                        <GridViewColumn Header="Groupe" Width="100" DisplayMemberBinding="{Binding libelleGroupe}" />
                    </GridView>
                </ListView.View>
            </ListView>
    
    

    Code du Groupe.cs (Ici le Groupe.cs marche parfaitement) :

    public class Groupe : Crud<Groupe>
        {
            public long nGroupe
            {
                get; set;
    
            }
    
            public string libelleGroupe
            {
                get; set;
            }
    
            public List<Eleve> eleves
            {
                get; set;
    
            }
    
            public Groupe()
            {
    
            }
    
            public void Create()
            {
                throw new NotImplementedException();
            }
    
            public void Read()
            {
                throw new NotImplementedException();
            }
            public void Update()
            {
                throw new NotImplementedException();
            }
    
            public void Delete()
            {
                throw new NotImplementedException();
            }
    
            public List<Groupe> FindAll()
            {
                List<Groupe> listeGroupes = new List<Groupe>();
                DataAccess access = new DataAccess();
                SqlDataReader reader;
    
    
                try
                {
                    if (access.openConnection())
                    {
                        reader = access.getData("select * from dbo.Groupe;");
    
    
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Groupe unGroupe = new Groupe();
                                unGroupe.nGroupe = reader.GetInt32(0);
                                unGroupe.libelleGroupe = reader.GetString(1);
                                listeGroupes.Add(unGroupe);
    
    
                            }
                        }
                    
                    else
                    {
                        System.Windows.MessageBox.Show("No rows found.", "Important Message");
                    }
    
                    reader.Close();
                    access.closeConnection();
                }
                }
    
                catch (Exception ex)
                {
                    System.Windows.MessageBox.Show(ex.Message, "Important Message");
                }
    
                return listeGroupes;
    
            }

    Mais le ListView de Eleve ne m'affiche rien :

            <ListView x:Name="listviewEleves" HorizontalAlignment="Left" Height="178" Margin="46,69,0,0" VerticalAlignment="Top" Width="250" Grid.Row="2">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Numéro" Width="100" DisplayMemberBinding="{Binding nEleve}" />
                        <GridViewColumn Header="Nom" Width="100" DisplayMemberBinding="{Binding nEleve}" />
                    </GridView>
                </ListView.View>
            </ListView>




    Code du Eleve.cs (L'élément qui ne marche pas) 

     public class Eleve : Personne, Crud<Eleve>
        {
            /* public ConsulteNotes()
             {
                 // TODO: implement
             }
             */
    
            public long nEleve
            {
                get; set;
            }
    
            public string nomEleve
            {
                get; set;
            }
    
            public string prenomEleve
            {
                get; set;
            }
    
    
    
    
            /*public System.Collections.ArrayList note;
    
            /// <pdGenerated>default getter</pdGenerated>
            public System.Collections.ArrayList GetNote()
            {
                if (note == null)
                    note = new System.Collections.ArrayList();
                return note;
            }
    
            /// <pdGenerated>default setter</pdGenerated>
            public void SetNote(System.Collections.ArrayList newNote)
            {
                RemoveAllNote();
                foreach (Note oNote in newNote)
                    AddNote(oNote);
            }
    
            /// <pdGenerated>default Add</pdGenerated>
            public void AddNote(Note newNote)
            {
                if (newNote == null)
                    return;
                if (this.note == null)
                    this.note = new System.Collections.ArrayList();
                if (!this.note.Contains(newNote))
                    this.note.Add(newNote);
            }
            */
    
    
            public void Create()
            {
                throw new NotImplementedException();
            }
    
            public void Read()
            {
                throw new NotImplementedException();
            }
    
            public void Update()
            {
                throw new NotImplementedException();
            }
    
            public void Delete()
            {
                throw new NotImplementedException();
            }
    
            internal List<Eleve> FindAll()
            {
    
                List<Eleve> listeEleves = new List<Eleve>();
                DataAccess access = new DataAccess();
                SqlDataReader reader;
    
    
                try
                {
                    if (access.openConnection())
                    {
                        reader = access.getData("select * from dbo.Eleve;");
    
    
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Eleve unEleve = new Eleve();
                                unEleve.nEleve = reader.GetInt32(0);
                                unEleve.nomEleve = reader.GetString(0);
                                //unEleve.prenomEleve = reader.GetString(1);
                                listeEleves.Add(unEleve);
    
                            }
                        }
    
                        else
                        {
                            System.Windows.MessageBox.Show("No rows found.", "Important Message");
                        }
    
                        reader.Close();
                        access.closeConnection();
                    }
                }
    
                catch (Exception ex)
                {
                    System.Windows.MessageBox.Show(ex.Message, "Important Message");
                }
    
                return listeEleves;
            }

    Avant j'avais eu l'erreur : "le cast spécifié n'est pas valide" ; puis j'ai modifié les lignes : 

                                unEleve.nEleve = reader.GetInt32(0);
                                unEleve.nomEleve = reader.GetString(0);
                                //unEleve.prenomEleve = reader.GetString(1);

    Puis j'ai eu l'erreur : "Impossible d'effectuer un cast d'un objet de type 'System.Int32' en type 'System.String'.

    Si je met nomEleve et prenomEleve en Int, cela ne m'affiche aucun message d'erreur, mais cela ne m'affiche pas la liste des élèves comme même

    Voici la table ELEVE et GROUPE dans la base de donnée :

    GROUPE :

    CREATE TABLE [dbo].[GROUPE] (

        [IDGROUPE]      INT          NOT NULL,

        [LIBELLEGROUPE] VARCHAR (30) NULL,

        CONSTRAINT [PK_GROUPE] PRIMARY KEY NONCLUSTERED ([IDGROUPE] ASC)

    );

    ELEVE :

    CREATE TABLE [dbo].[ELEVE] (

        [IDELEVE]     INT           NOT NULL,

        [IDGROUPE]    INT           NOT NULL,

        [NOMELEVE]    VARCHAR (30)  NULL,

        [PRENOMELEVE] VARCHAR (30)  NULL,

        [PATHPHOTO]   VARCHAR (200) NULL,

        CONSTRAINT [PK_ELEVE] PRIMARY KEY NONCLUSTERED ([IDELEVE] ASC),

        CONSTRAINT [FK_ELEVE_EST_DANS_GROUPE] FOREIGN KEY ([IDGROUPE]) REFERENCES [dbo].[GROUPE] ([IDGROUPE])

    );

    GO

    CREATE NONCLUSTERED INDEX [EST_DANS_FK]

        ON [dbo].[ELEVE]([IDGROUPE] ASC);

    Pouvez vous m'éclairer sur ce sujet ? Merci :)

    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2019 à 15:56:01

      nEleve est un long de quoi ???

      Si c'est la concaténation de nom et prénom :

      Le plus rapide, c'est de changé votre requête SQL ligne 90 pour qu'elle face elle-même la concaténation de chaine.

      "select CONCAT(nom,prenom), ... from dbo.Eleve"

      (Il y a plus flexible mais vous semblez complètement paumé)

      Avec votre "select *", vous devez avoir les champs de votre classe "Eleve" remplit dans l'ordre des colonnes de la table.

      Le paramètre "0" des "Getxxx", c'est le numéro de colonne, ici, vous lisez toujours la même colonne.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
      Anonyme
        7 juin 2019 à 16:30:42

        Merci pour ta réponse, mais j'ai résolu le problème le jour même, je mettrais la réponse à mon problème dès que j'aurais le temps, mais merci quand même ;)
        • Partager sur Facebook
        • Partager sur Twitter

        Problème entre une BDD SQL et une app WPF

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown