Le remplissage d'une grille de données avec des Colonnes dynamiques
J'ai un Datagrid qui doit se remplir dynamicly.
La tablelayout, c'est comme:
id | image | name | Description | Name-1 | Name-N
Les 4 premières colonnes sont statiques, les autres de la dynamique. L'Utilisateur doit être en mesure d'ajouter autant d'utilisateurs qu'il le souhaite.
J'essaie de comparer les données de plusieurs utilisateurs en les mettant les uns à côté des autres dans le tableau.
Droit maintenant, j'ai une zone de liste qui contient les Noms de la dynamique générée Colonnes et une méthode que les filles de la statique des colonnes. Je peux aussi charger les données pour chaque Utilisateur. maintenant, j'ai besoin de les fusionner pour une grande Table.
Le principal Problème est maintenant: Comment faire pour mettre le "Userdata" et le contenu statique dans un datagrid.
Im pas sûr de ce que votre demande.
Johannes voir ma réponse, de sorte que vous pouvez voir pourquoi j'ai demandé que.
OriginalL'auteur Wr4thon | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Il y a au moins trois façons de le faire:
Utiliser un CustomTypeDescriptor
*recommandé pour des raisons de simplicité
1ère approche: utiliser le code-behind pour générer la grille de données de colonnes lors de l'exécution. C'est simple à mettre en œuvre, mais peut-être se sent un peu hackish, surtout si vous êtes en utilisant MVVM. Donc, si vous voulez votre grille de données avec des colonnes fixes:
Lorsque vous avez votre "Noms" prêt, puis modifier la grille en ajoutant/supprimant des colonnes, par exemple:
Vous aurez envie de créer une classe wrapper, qui devrait contenir la classe d'origine, en plus d'un dictionnaire qui contient les propriétés personnalisées. Disons que votre ligne principale de la classe est "User", vous voudriez une classe wrapper quelque chose comme ceci:
Remplir le
ItemsSource
avec une collection de cette nouvelle "CustomUser" classe:Afin de les lier ensemble, par exemple:
2ème approche: utiliser un DataTable. Cela rend l'utilisation de ce type d'infrastructure sous le capot, mais est plus facile à utiliser. Juste lier le contrôle DataGrid est
ItemsSource
à unDataTable.DefaultView
propriété:Ensuite, vous pouvez définir les colonnes toutefois vous le souhaitez, par exemple:
3ème approche: faire usage de l'extensibilité de .Net type de système. Plus précisément, l'utilisation d'un
CustomTypeDescriptor
. Cela vous permet de créer un type personnalisé lors de l'exécution; qui à son tour vous permet d'indiquer la grille de données que votre type a les propriétés "Nom1", "Nom2", ... "Namur", ou ce que d'autres vous voulez. Voir ici pour un simple exemple de cette approche.Quelqu'un a réussi à auto-généré colonnes dans la grille de données à l'aide de la méthode 3? J'ai déjà un personnalisé du descripteur de type défini, je peux lier à ses propriétés, mais l'auto-génération de colonnes n'est pas de travail.
que faire si nous voulons modifier et mettre à jour les valeurs dans la même grille de données
Cela ne semble fonctionner que si les colonnes de données sont ajoutés avant le contrôle est initialisé. Si vous modifiez les colonnes plus tard comment obtenez-vous que pour être reflété dans la grille?
Question difficile, je ne sais pas pour la main. Appel InvalidateVisual peut-être?
OriginalL'auteur McGarnagle
Je suis actuellement en utilisant une autre Approche, je ne suis pas sûr tho si c'est juste pour faire comme cela, mais il fonctionne. J'ai fait un petit échantillon.
Garder à l'esprit que pour que cela fonctionne à chaque entrée dans la grille de données Doivent avoir la même dynamique colonnes, le rendant un peu moins souple. Mais si u ont entrys avec diffrent nombre de colonnes dans chaque entrée d'un contrôle Datagrid est probablement pas la bonne Approche, de toute façon.
Ce sont mes classes
Et c'est le Code Behind:
Et dans .XAML simplement:
Serais très intéressé si vous pouvez faire une commande personnalisée. Qui pourrait m'aider beaucoup.
OriginalL'auteur Bedi
Si vous n'êtes pas tenu de démontrer que dans une seule grille de données(table), alors vous pourriez avoir un DataGrid avec id,image,nom,Description et lorsque l'un des dossiers est sélectionnée sur que la grille de données, alors vous montrez de rafraîchissement ou d'une zone de liste avec le nom des images qui sont liés à cet enregistrement sélectionné
OriginalL'auteur Mauricio Gracia Gutierrez