La liaison d'un wpf listview à un ensemble de données...Possible..?
J'ai eu du mal déplacement à Wpf,je suis juste coincé en essayant de liaison de données pour un lsitview.Je veux databind une listview pour un jeu de données(dataset parce que les données que je veux afficher dans les colonnes appartient à des tables différentes).Je joins un exemple de code que je suis en train d'essayer avec.Il fonctionne bien, mais le listliew n'affiche qu'une seule ligne.Ce qui pourrait être mauvais.Quelqu'un peut-il me guider.Tous les échantillons sont disponibles à l'aide de tables de données.None spécifie sur la liaison à une base de données.Svp aider..toute contribution sera très appréciée...merci d'avance
Mon Xaml
<Grid>
<TextBox Text="" Height="20" Width="100" HorizontalAlignment="Left" Margin="15,13,0,0" VerticalAlignment="Top"></TextBox>
<TextBox Text="" Height="20" Width="100" HorizontalAlignment="Left" Margin="15,42,0,0" VerticalAlignment="Top"></TextBox>
<ListView Margin="15,89,63,73" Name="lst" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=T1/Name}"></GridViewColumn>
<GridViewColumn Header="Place" DisplayMemberBinding="{Binding Path=T2/Name}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<!--<Button Height="19" HorizontalAlignment="Right" Name="button2" VerticalAlignment="Top" Width="46" Margin="0,42,63,0" Click="button2_Click">Add</Button>-->
<Button Height="19" HorizontalAlignment="Right" Name="button1" VerticalAlignment="Top" Width="46" Click="button1_Click" Margin="0,43,63,0">Add</Button>
Mon Code
Dt1 = new DataTable("T1");
Dt1.Columns.Add("Name");
Dt1.Rows.Add("abc1");
Dt1.Rows.Add("abc2");
Dt2 = new DataTable("T2");
Dt2.Columns.Add("Name");
Dt2.Rows.Add("xyz1");
Dt2.Rows.Add("xyz1");
Ds = new DataSet();
Ds.Tables.Add(Dt1);
Ds.Tables.Add(Dt2);
lst.DataContext = Ds;
OriginalL'auteur | 2009-06-07
Vous devez vous connecter pour publier un commentaire.
Salut suis totalement d'accord avec Andy et Thomas. Ils ont tous deux expliqué le concept d'élégance.
Je veux seulement montrer les étapes pour faire la même chose qu'avec dataset.
Le MVVM (ModelView ViewModel) je ne suis pas en train de parler ici.
Le Xaml ressemble à ceci
Dans le .CS fichier créer un dataset
Suivant dans l'événement click du Bouton d'écrire la suite de
private void btnAddRecord_Click(object sender, RoutedEventArgs e)
N. B.~ Vous ne pouvez pas affecter la source de la liste de l'ensemble des données.
Pourquoi ? Vous pouvez demander?
Un jeu de données, en termes simples , est une collection de tableaux de données.
Supposons que vous avez 5 différentes tables de données. Et dire aucun de leurs noms de colonnes ainsi que les numéros de colonne sont les mêmes.
Maintenant que vous avez attribué à tous ceux de votre jeu de données. Comment les contrôles de source de savoir que la source dont il a à se lier?
Afin de surmonter une telle situation, soit faire un personnalisé datatable qui aura toutes les colonnes de ces discrète tables de données et attribuer les valeurs de la personnalisation de l'un puis de se lier à la source.
Ou vous devez explicitement spécifier la datatable dans la source de données
Mais je préfère toujours utiliser le pattern MVVM pour ce genre d'opérations.
Par mégarde, il s'est passé. Je suis censé écrire mydataset().Tables[0] .
Mais toujours il n'ya aucun moyen que vous pouvez lier un jeu de données à une liste ou une zone de liste..?.Je veux Juste afficher les données de plusieurs tables de données dans un contrôle listbox..U peut se lier à des objets.jeu de données et les tables de données sont des objets.Quelle est donc la différence entre la liaison à un buisness objet et un ensemble de données..?
OriginalL'auteur priyanka.sarkar
Je ne suis pas sûr de ce que vous essayez de faire ici... Est-ce le résultat que vous attendez ?
Il n'y a aucun rapport entre vos tables, de sorte que le système de liaison ne peut pas deviner quelle ligne de T1 vous souhaitez associer à la ligne de T2... Vous devez soit mettre toutes les données dans le même tableau, ou d'utiliser un DataRelation entre les deux tables (mais cela nécessiterait de champs supplémentaires pour le rejoindre). Vous pouvez alors définir la DataTable que l'ItemsSource, pas le jeu de données.
Alternativement, vous pouvez créer une classe dédiée à contenir les données, comme suggéré par Andy
OriginalL'auteur Thomas Levesque
WPF Liaison fonctionne hors de propriétés. Par exemple, considérez les points suivants
Person
objet:Vous pouvez ensuite modifier le code XAML pour votre
ListView
pour afficher une collection dePerson
objets en procédant comme suit:Cela permet d'afficher l'objet premier du nom dans la première colonne, et leur nom de famille dans la deuxième colonne (en supposant que le
DataContext
de laListView
est une collection dePerson
objets).En théorie, de lier les valeurs dans un
DataTable
à unListView
, vous pouvez définir laItemsSource
à laDataTable
'sRows
de la propriété. Le problème est que leDataRow
classe de ne pas exposer les propriétés de ses colonnes, il est seulement leItem
propriété qui prend un argument indication de la ligne. À ma connaissance, XAML ne prend pas en charge les propriétés de prendre des arguments, donc je ne pense pas qu'il est possible d'utiliser unDataTable
comme leItemsSource
pour unListView
.Vous avez d'autres options, cependant. Vous pouvez créer un typage fort
DataSet
, qui expose unDataTable
avec une propriété pour chaque colonne. Vous pouvez ensuite lier chaqueGridViewColumn
à la propriété correcte.Une autre approche serait de ne pas utiliser un
DataTable
à tous. Votre couche de données serait encore charger les données à partir de votre source dans leDataTable
, mais il serait alors convertir les données dans les objets normaux. Vous pouvez créer une instance de ObservableCollection, ajouter chacun des objets, puis lier lesListView
. ChaqueGridViewColumn
serait juste de se lier à la propriété correspondante de l'objets.Mise à jour:
En réponse à des OP autre question:
Vous avez besoin de plus que juste une propriété pour une DataTable. Vous auriez également besoin d'une propriété pour chaque valeur de chaque ligne de la Table de données. Sinon il n'y a pas de propriété pour la liste de colonnes à lier à.
OriginalL'auteur Andy
Cela a fonctionné pour moi.
ListView XAML
OriginalL'auteur Christoffer