Edition à la volée d'une cellule d'un DataGrid [Résolu]

eveyhyuu 7 Messages postés mardi 3 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 5 avril 2012 à 23:28 - Dernière réponse : eveyhyuu 7 Messages postés mardi 3 avril 2012Date d'inscription 6 avril 2012 Dernière intervention
- 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.
Afficher la suite 

2 réponses

Répondre au sujet
Tupad 239 Messages postés lundi 5 décembre 2005Date d'inscription 27 août 2012 Dernière intervention - 6 avril 2012 à 14:30
+3
Utile
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;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Tupad
eveyhyuu 7 Messages postés mardi 3 avril 2012Date d'inscription 6 avril 2012 Dernière intervention - 6 avril 2012 à 14:59
0
Utile
Ça marche beaucoup mieux, merci infiniment pour ton aide, ça me sauve la vie :D
Commenter la réponse de eveyhyuu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.