none
Récupérer les données d'un DataGrid RRS feed

  • Question

  • Bonjour, (Désoler je recréé un post car impossible de réponde à Aurel BERA

    Je souhaiterais créer un DataGrid, qui comprendrait 3 colonnes (nom, prénom et cote de l'élève). Les données sont stockées pour l'instant dans des fichier XML.

    Les colonnes du nom et du prénom sont bien binder et fonctionnent bien, la dernière colonne doit être éditable par l'utilisateur.

    Je ne sais plus comment rendre la dernière colonne éditable.

    Voici mon code XAML qui défini le DataGrid ainsi que les 3 colonnes. J'ai beau mettre IsReadyOnly à false, la dernière colonne n'est pas éditable.

    <Grid Name="GridPoint">
         <DataGrid Name="DataGridPoint" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Prénom" Binding="{Binding Prenom}"IsReadOnly="True"/>
                    <DataGridTextColumn Header="Nom" Binding="{Binding Nom}" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Cote" IsReadOnly="False" />
                </DataGrid.Columns>
          </DataGrid> 
    </Grid>
    
    


    Voici mon code C#, qui me permet de binder les infos des élèves : 

               

    public void DataGrid(){      List<Student> listStudent = new List<Student>();        Student s;            try{ XDocument doc = XDocument.Load(@"..\..\files\Student.xml");

          IEnumerable<XElement> rechListeStudent = from element in doc.Root.Elements("Student") select element;         if (rechListeStudent.Count() != 0){       foreach (XElement element in rechListeStudent)             {          s = new Student((int)element.Element("Id"),(string)element.Element("Prenom"),(string)element.Element("Nom"), (string)element.Element("Sexe"));                        listStudent.Add(s);                    }                    DataGridPoint.ItemsSource = listStudent.DefaultIfEmpty();               

    } else {}   }   catch (System.IO.FileNotFoundException ex)            {} }


    Ma recherche se fait dans un fichier XML. Les prénoms et noms des élèves sont bien initialisés. 



    Comment puis-je rendre la dernière colonne éditable et surtout comment puis-je récupérer ces valeurs suite à l'action Click ?
    vendredi 13 septembre 2013 12:00

Réponses

  • Après de nombreux tests, j ai enfin trouvé une solution. Pour ceux qui sont intéressés : Voici mon code XAML de la datagrid : <Grid Name="GridPoint"> <DataGrid Name="DataGridPoint" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Prénom" Binding="{Binding Prenom}"IsReadOnly="True"/> <DataGridTextColumn Header="Nom" Binding="{Binding Nom}" IsReadOnly="True"/> <DataGridTextColumn Header="Cote" Binding="{Cote}" IsReadOnly="False" /> </DataGrid.Columns> </DataGrid> </Grid> Et voici mon code c# : Il faut rajouter un attribut côté dans la classe du student. public void DataGrid(){ ObservableCollection<Student> listStudent = new ObersableCollection<Student>(); Student s; try{ XDocument doc = XDocument.Load(@"..\..\files\Student.xml"); IEnumerable<XElement> rechListeStudent = from element in doc.Root.Elements("Student") select element; if (rechListeStudent.Count() != 0){ foreach (XElement element in rechListeStudent) { s = new Student((int)element.Element("Id"),(string)element.Element("Prenom"),(string)element.Element("Nom"), (string)element.Element("Sexe")); listStudent.Add(s); } DataGridPoint.ItemsSource = lIstStudent; } else {} } catch (System.IO.FileNotFoundException ex) {} } À partir de la, la datagrid possède la dernière colonne editable. Pour récupérer la valeur de la colonne editable ( la donne de la cote), il suffit d écrire : MessageBox.Show(listStudent.Cote); Et le tour est joué. Désole pour la mise en page mais impossible de faire ça correctement
    • Marqué comme réponse Aurel Bera lundi 16 septembre 2013 06:53
    dimanche 15 septembre 2013 09:26

Toutes les réponses

  • Bonjour

    Le problème c'est dans ce cas que  la colonne      <DataGridTextColumn Header="Cote" IsReadOnly="False" /> n'est pas bindée.
    Dans la classe Student vous devez avoir une propriété ou maintenir la valeur (utilisez Binding="{Binding ....}" ) de la colonne "Cote".

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 13 septembre 2013 13:37
  • Ok donc je dois binder la colonne qui correspond à la cote. J ai donc ajouté un attribut à la classe student. Et j ai ajouté un binding dans le XAML. Mais comment est il possible de rendre la colonne d un dataGrid editable? Pour l instant des que je clique sur une cellule de la colonne Côté, j obtiens une InvalidOperationException... merci de vote aide
    vendredi 13 septembre 2013 14:30
  • Après de nombreux tests, j ai enfin trouvé une solution. Pour ceux qui sont intéressés : Voici mon code XAML de la datagrid : <Grid Name="GridPoint"> <DataGrid Name="DataGridPoint" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Prénom" Binding="{Binding Prenom}"IsReadOnly="True"/> <DataGridTextColumn Header="Nom" Binding="{Binding Nom}" IsReadOnly="True"/> <DataGridTextColumn Header="Cote" Binding="{Cote}" IsReadOnly="False" /> </DataGrid.Columns> </DataGrid> </Grid> Et voici mon code c# : Il faut rajouter un attribut côté dans la classe du student. public void DataGrid(){ ObservableCollection<Student> listStudent = new ObersableCollection<Student>(); Student s; try{ XDocument doc = XDocument.Load(@"..\..\files\Student.xml"); IEnumerable<XElement> rechListeStudent = from element in doc.Root.Elements("Student") select element; if (rechListeStudent.Count() != 0){ foreach (XElement element in rechListeStudent) { s = new Student((int)element.Element("Id"),(string)element.Element("Prenom"),(string)element.Element("Nom"), (string)element.Element("Sexe")); listStudent.Add(s); } DataGridPoint.ItemsSource = lIstStudent; } else {} } catch (System.IO.FileNotFoundException ex) {} } À partir de la, la datagrid possède la dernière colonne editable. Pour récupérer la valeur de la colonne editable ( la donne de la cote), il suffit d écrire : MessageBox.Show(listStudent.Cote); Et le tour est joué. Désole pour la mise en page mais impossible de faire ça correctement
    • Marqué comme réponse Aurel Bera lundi 16 septembre 2013 06:53
    dimanche 15 septembre 2013 09:26