Je tâche de faire ca dès que possible
Je tâche de faire ca dès que possible
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
En attendant, je suis déjà passé à l'étape suivante : l'affichage des données enregistrées dans un listView/gridView. Jusque-là, pas de problème, j'arrive à récupérer mes données les binder à ma listView.
Mais je me pose une question. Dans le cas présent j'ai deux tables dans ma base de données : reports et observers
Et j'ai une relation 1:N entre les deux. Dans pa table reports j'ai donc une clé étrangère sur la table observers . Ainsi, dans mon gridView, dans ma colonne "observer" ce n'est pas son nom qui s'affiche mais son ID. Normal, puisque j'ai seulement récupéré les données provenant de la table reports.
Je me pose donc la question : Comment vais-je faire pour afficher le nom, et non l'id dans mon gridView. J'envisage deux possibilités :
1. Ajouter dans mon objet métier CRReportBO une propriété me permettant de récupérer le nom correspondant à l'id de l'observateur.
2. Récupérer les données provenant de reports et celles de observers, puis essayer de binder tout ça. Je ne sais pas si c'est possible. L'idée serait d'afficher, à la place de l'id de l'observateur, le nom correspondant et provenant des données venant de observers. Je ne sais pas si mes explication sont assez claires, mais est-ce possible ?
Pour faire ce que tu veux faire, tu dois pouvoir passer par une sous-requête, en SQL.
PS: Le code dont je te parler (VS 2008 Beta 2) est en PJ
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Ok
Merci.
Il y a deux problèmes :
1. Impossible d'ouvrir un projet VS 2008 avec VS 2005. J'ai donc créé un nouveau projet auquel j'ai ajouter te fichier.
2. VS2005 n'a pas l'air d'aimer cette syntaxe :
sur la première { il me dit qu'il attend une )
Code : Sélectionner tout - Visualiser dans une fenêtre à part MyItems.Add(new Item() { Name = "Element 1" });
Ah bah oui: comme c'est du VS 2008, j'ai utilisé quelques nouveautés de C# 3
Bon, laisse tomber: tu es arrivé à faire ce que tu voulais et c'était le principal
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
du 3.5 plutôt, non ? Parce que le 3.0 je l'ai et ça fonctionne avec VS 2005
C'est vrai. Et en plus, je ne sais pas si je vais utiliser cette méthode longtemps, il est possible que j'utilise la classe ErrorProvider de Paul Stovell
Mais quand quelque chose ne fonctionne pas, j'aime bien comprendre pourquoi
Bon, je vais cliquer sur
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Je l'ai installé il y a un peu plus d'un mois, je devrais avoir la dernière version non ?
Oui mais cela dépend de quelle version tu as installé
Tu as un lien vers ce que tu as installé ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
J'avais déjà .NET 2 installé et j'ai fait une mise à jour par Microsoft Update
OK donc c'est .NET 3.0 que tu as installé: C# 3 n'est pas disponible via Windows Update
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Donc si j'ai bien compris ce que j'ai lu ici : http://msdn2.microsoft.com/fr-fr/lib...sz(VS.80).aspx , C# 3 est dans .NET 3.5 . C'est correct ?
Est-il possible d'utiliser C# 3 depuis VS 2005. Il y a quelques nouveauté que j'ai découvert qui m'intéressent.
Oui
Oui, tu peux installer la CTP de Mai 2006 de LINQ mais cependant, elle ne te donnera pas accès à toutes les nouveautés que tu as lues Pour toutes les avoir, il faut VS 2008Est-il possible d'utiliser C# 3 depuis VS 2005. Il y a quelques nouveauté que j'ai découvert qui m'intéressent.
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
ok. bon je crois que je vais laisser C# 3 de côté pour le moment.
Par contre j'ai un autre souci de binding.
J'ai mis mes objets CRReportBO dans une liste de type, CRReportsCollection. Elle hérite de ObservableCollection et fourni en plus une propriété qui permet de connaître le rapport actuellement sélectionné
J'affiche le contenu de cette collection dans un ListView. Et quand je sélectionne un élément de cette liste, la propriété Curent est modifiée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class CRReportsCollection : ObservableCollection<CRReportBO> { private CRReportBO current; public CRReportBO Current { get { return current; } set { current = value;} } }
Jusque là, tout va bien.
Maintenant j'aimerais afficher le détail du rapport dans un autre userControl contenant des textBlock. J'ai donc bindé mes textBlock sur la propriété Current.
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part DataContext = MainWindow.Reports.Current; //Reports est mon objet CRReportsCollection (public static)
Mais quand je modifie la propriété Current de ma liste (en sélectionnant une autre ligne dans ma ListView) les textBlock ne sont pas mis à jour. Ca ne devrait pas être le cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <TextBlock x:Name="DetailTitle" Text="{Binding Path=Title, UpdateSourceTrigger=PropertyChanged}" />
Bizarre, ton DataContext est appliqué à la fenêtre ? Tu as essayé de faire ton binding en utilisant Blend ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
En fait je suis dans un userControl.
Dans le constructeur j'ai mis :
Non. Par contre j'ai remarqué que si je modifie manuellement le dataContext avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part DataContext = MainWindow.Reports.Current;
, la mise à jour se fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part DataContext = MainWindow.Reports.Current;
Pas tout ompris là, tu me montres 2 fois la même lignes de code
Tu veux dire que appelé à nouveau:
DataContext = MainWindow.Reports.Current;
arrive à mettre à jour l'interface ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Oui, c'est ça.
Au moment où une ligne est sélectionnée dans ma listView, j'appelle une méthode qui se trouve dans le userControl devant être rafraichi.
Et dans ce cas-là, la modification se fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void refresh() { DataContext = MainWindow.Reports.Current; }
Pas très propre tout cela... Je te conseille d'implémenter INotifyPropertyChanged sur ta classe CRReportBO et de voir si cela règle ton pb
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager