Edition à la volée d'une cellule d'un DataGrid

Résolu
eveyhyuu Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 6 avril 2012 - 5 avril 2012 à 23:28
eveyhyuu Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 6 avril 2012 - 6 avril 2012 à 14:59
Bonsoir,

J'ai actuellement un projet WPF dans lequel j'utilise un DataGrid pour lister le contenu d'une base de donnée XML.

Mon problème vient au niveau de l'édition.
L'objectif : pouvoir éditer une cellule directement dans le DataGrid
Problème : lors d'un double clic sur une cellule une exception est levée ('EditItem' n'est pas autorisé pour cette vue).

Après de nombreuses recherches sur le net, j'ai trouvé une multitude de techniques pour faire ce que je veux, sauf qu'aucune d'entre elle n'a fonctionné, je me retrouve toujours avec la même exception qui prime sur le reste.

J'ai bien penser faire l'édition via un bouton Edit mais ça n'empêche pas le double clic de faire planter le programme (ce qui n'est pas vraiment ce que je souhaite).
De plus, je souhaiterais que l'édition se fasse via le DataGrid directement, même si la propagation des données doit se faire à la main, c'est pas gênant.

Dans les propriétés du DataGrid j'ai bien mis IsReadOnly à false, j'ai tenter de modifier toutes les propriétés relative à l'édition, mais rien n'y fait, j'ai toujours cette même exception.

J'ai cherché également plus de renseignement sur cette exception mais rien, personne ne voit de quoi il s'agit :/

Je vous met le code du DataGrid, s'il vous faut d'autres informations (codes, erreurs ou autre) n'hésitez pas.

 <DataGrid AutoGenerateColumns="True" Height="200" HorizontalAlignment="Left" Margin="122,36,0,0" Name="Musique" VerticalAlignment="Top" Width="490" MaxColumnWidth="Infinity" FontFamily="Arial" ItemsSource="{Binding}" GridLinesVisibility="Vertical" IsEnabled="True" IsReadOnly="False" MouseDoubleClick="Musique_MouseDoubleClick">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Select">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Name="Select" HorizontalAlignment="Center"  DataContext="{Binding FlagPaiement, Mode=TwoWay}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Title" Binding="{Binding Path=Element[Title].Value}" />
                    <DataGridTextColumn Header="Artist" Binding="{Binding Path=Element[Artist].Value}" />
                    <DataGridTextColumn Header="Album" Binding="{Binding Path=Element[Album].Value}" />
                    <DataGridTextColumn Header="Genre" Binding="{Binding Path=Element[Genre].Value}" />
                    <DataGridTextColumn Header="Time" Binding="{Binding Path=Element[Time].Value}" />
                    <DataGridTextColumn Header="Year" Binding="{Binding Path=Element[Year].Value}" />
                </DataGrid.Columns>
            </DataGrid>


J'avoue que j'ai cherché ardemment mais j'ai rien trouvé pour corriger mon soucis, ca fait maintenant 4jours que je bloque dessus donc j'avoue que je serais vraiment ravi de pouvoir résoudre ce problème.

2 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
6 avril 2012 à 14:30
C'est un problème du au chargement de tes données. Si tu le fais directement depuis le fichier xml, tu ne pourras pas les modifier.

Essaies de changer
XElement mymusic = XElement.Load("test.xml");
this.Musique.DataContext = mymusic.Elements("data");


Par

XElement mymusic = XElement.Load("test.xml");
List<XElement> list = mymusic.Elements("data").ToList();
this.Musique.DataContext = list;
3
eveyhyuu Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 6 avril 2012
6 avril 2012 à 14:59
Ça marche beaucoup mieux, merci infiniment pour ton aide, ça me sauve la vie :D
0
Rejoignez-nous