Comment créer une nouvelle ligne dans WPF DataGrid quand il est lié à un XmlDataProvider?
J'ai un projet avec un XmlDataProvider lié à un WPF contrôle DataGrid. J'ai les liaisons sur la grille de données défini comme suit:
<dg:DataGrid ItemsSource="{Binding Source={StaticResource XmlData}, XPath=Root/People/Person}"
AutoGenerateColumns="False">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="ID" Binding="{Binding XPath=ID}"/>
<dg:DataGridTextColumn Header="Name" Binding="{Binding XPath=Name}"/>
</dg:DataGrid.Columns>
</dg:DataGrid>
Les utilisateurs peuvent modifier les entrées à l'aide de la grille de données sans aucun problème. Ce que je n'arrive pas à accomplir est de permettre à l'utilisateur d'ajouter une nouvelle ligne (c'est à dire une nouvelle Personne) à l'aide de la grille de données. Comment puis-je permettre à cette?
source d'informationauteur bluepolystyreneman
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que vous définissez:
CanUserAddRows="True"
et que le constructeur par défaut d'une classe liée est disponible.Pour ajouter une ligne à un WPF DataGrid qui est lié à un XmlDataSource, vous avez besoin de modifier directement la sauvegarde de données à stocker. Vous pouvez utiliser la grille de données pour collecter les nouvelles informations de ligne de l'utilisateur, puis dans le RowEditEnding événement, vous pouvez ajouter la ligne d'information de votre magasin de sauvegarde et de prévenir la grille de données de l'essayer pour valider la modification à l'aide de sa logique interne. Depuis le contrôle DataGrid est lié à la XmlDataSource, il affichera les modifications que vous avez apportées à la mémoire de sauvegarde.
Voici l'idée générale:
Avez-vous essayé de réglage CanUserAddRows="True" sur le DataGrid?
Est le problème que l'utilisateur ne peut pas ajouter des lignes ou est-ce que lorsque l'utilisateur ajoute une ligne, il n'est pas enregistré dans le support de XML magasin? Je peux facilement ajouter un datagrid avec CanUserAddRows="True" pour une application WPF, lier la grille pour une liste en mémoire, puis demandez à l'utilisateur d'ajouter des lignes, qui sont reflétées dans cette liste en mémoire. Cela me fait penser que votre problème est d'économiser de la mémoire de sauvegarde.
Quand je lier à un fichier XML sur le système de fichiers, je ne peux plus ajouter des enregistrements dans la grille de données. Je pense que vous aurez besoin d'un mineur solution de contournement que vous lisez le fichier dans une collection en mémoire, lier et ensuite mettre à jour le fichier en conséquence que les utilisateurs d'ajouter des lignes.