IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

DataGrid : comment conserver la source originale (ou une copie) ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Points : 10
    Points
    10
    Par défaut DataGrid : comment conserver la source originale (ou une copie) ?
    Bonjour à tous,

    J'affiche dans un formulaire une DataGrid liée à une série de données qui peut être modifiée par l'utilisateur. Suite à ses modifications, l'utilisateur peut valider ou non le formulaire. Lors de la non validation du formulaire (= fermeture sans enregistrement) je pensais retrouver les données telles qu'elles étaient lors de l'ouverture du formulaire... MAIS je constate que toute modification d'une valeur dans la DataGrid est systématiquement reportée dans la source de celle-ci !

    J'ai écrit un tout petit exemple pour mieux vous montrer :

    > Objet affiché dans la DataGrid :

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Imports System
    Imports System.Collections.Generic
    Imports System.Windows
    Imports System.ComponentModel
     
    Namespace ESSAI
     
    	Public Class Variable
     
    		Inherits DependencyObject
     
     
    		'****************************************************************
    		'Déclaration des variables
    		'****************************************************************		
     
    		Private _nom As String
    		Private _valeur As String
     
     
    		'****************************************************************
    		' Propriétés
    		'****************************************************************
     
    		#Region "CLR-PROPERTIES" 		
     
     
    		'****************************************************************
    		' Propriété nom
    		'****************************************************************	
    		''' <summary>
    		''' Propriété nom de la classe Variable
    		''' </summary>
    		''' <returns>
    		''' Indique le nom de la variable
    		''' </returns>
    		''' <remarks></remarks>			
    		Public Property nom() As String
     
    			Get
    				Return _nom
    			End Get
     
    			Set(value As String)
     
    				_nom = value
     
    			End Set 
     
    		End Property		
     
    		'****************************************************************
    		' Propriété valeur
    		'****************************************************************	
    		''' <summary>
    		''' Propriété valeur de la classe Variable
    		''' </summary>
    		''' <returns>
    		''' Indique la valeur de la variable
    		''' </returns>
    		''' <remarks></remarks>			
    		Public Property valeur() As String
     
    			Get
    				Return _valeur
    			End Get
     
    			Set(value As String)
     
    				_valeur = value
     
    			End Set 
     
    		End Property		
     
    		#End Region			
     
     
    		Public Sub New()
     
     
    		End Sub
     
    	End Class
     
    End namespace


    > Formulaire avec DataGrid :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <Window x:Class="ESSAI.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Name="TEST"
            Title="Debug_DataGrid" Height="300" Width="300">
     
    	<StackPanel
    		Orientation="Vertical">
     
    		<DataGrid
    			Name="_myDataGrid"
    			ItemsSource="{Binding Path=TEST.aList, Mode=OneWay}"
    			AutoGenerateColumns="False">
     
    			<DataGrid.Columns>
    				<DataGridTextColumn Header="Name" Binding="{Binding Path=nom}" />
    			</DataGrid.Columns>
     
    		</DataGrid>
     
    		<Button Content="TEST" Click="Button_Click" />
     
    	</StackPanel>
     
    </Window>


    > Code du formulaire :

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Imports System
    Imports System.Collections.Generic
    Imports System.Collections.ObjectModel
    Imports System.Text
    Imports System.Windows
    Imports System.Windows.Controls
    Imports System.Windows.Data
    Imports System.Windows.Documents
    Imports System.Windows.Input
    Imports System.Windows.Media
     
    Namespace ESSAI
     
    	Public Partial Class Window1
     
    		Inherits Window
     
    		Private aList As ObservableCollection(Of Variable) = New ObservableCollection(Of Variable)
    		Private myList As ObservableCollection(Of Variable) = New ObservableCollection(Of Variable)
     
    		Public Sub New()
     
    			InitializeComponent()
     
    			Dim aVariable As Variable
     
    			aVariable = New Variable
    			aVariable.nom = "VAR1"
    			aVariable.valeur = "1"
    			aList.Add(aVariable)
     
     
    			aVariable = New Variable
    			aVariable.nom = "VAR2"
    			aVariable.valeur = "2"
    			aList.Add(aVariable)			
     
     
    			aVariable = New Variable
    			aVariable.nom = "VAR3"
    			aVariable.valeur = "3"
    			aList.Add(aVariable)	
     
    			_myDataGrid.ItemsSource = aList		
     
    			myList = New ObservableCollection(Of Variable)(aList)
     
    		End Sub
     
     
    		Sub Button_Click(sender As Object, e As RoutedEventArgs)
     
    			For i As Integer = 0 To _myDataGrid.Items.Count - 2
     
    				Dim aVar As Variable = New Variable
     
    				aVar = DirectCast(_myDataGrid.Items(i), Variable)
     
    				System.Diagnostics.Debug.WriteLine("A - LIGNE : " & aVar.nom.ToString)
     
    			Next
     
    			System.Diagnostics.Debug.WriteLine("----------------------")
     
    			For i As Integer = 0 To myList.Count - 1
     
    				Dim aVar As Variable = New Variable
     
    				aVar = myList(i)
     
    				System.Diagnostics.Debug.WriteLine("B - LIGNE : " & aVar.nom.ToString)
     
    			Next			
     
    			System.Diagnostics.Debug.WriteLine("----------------------")
     
    			For i As Integer = 0 To Me.aList.Count - 1
     
    				Dim aVar As Variable = New Variable
     
    				aVar = Me.aList(i)
     
    				System.Diagnostics.Debug.WriteLine("C - LIGNE : " & aVar.nom.ToString)
     
    			Next			
     
    		End Sub
     
     
    	End Class
     
    End Namespace


    En modifiant le nom de l'une des 3 variables et en cliquant sur le bouton "TEST", vous pourrez constater (dans la fenêtre de sortie de votre éditeur) que la DataGrid, la source de celle-ci (aList) et une copie de la source elle-même (myList) font toutes les 3 apparaître la modification... Comment conserver la source originale (ou une copie) ?? Je suis certainement passé à coté de quelque chose mais impossible de voir quoi ! C'est en train de me rendre dingue ce truc...

    Merci à tous ceux qui auraient une réponse ou une idée !

    EyeRobot
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Hi,

    C'est normal que ta datasource est modifiée vu que c'est bindé sur la grille.

    Dans ta classe Variable tu peux par exemple ajouter un membre :

    Variable _OldData = null;

    Et dans le constructeur de la classe Variable tu fais :
    _OldData = new Variable();
    _OldData.nom = nom;
    _OldData.valeur= valeur;

    Et ensuite je suppose t'as un bouton ANNULER tu récupère le données à partir de la variable _OldData
    sinon tu sauvegarde.

    a+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Points : 10
    Points
    10
    Par défaut DataGrid : comment conserver la source originale (ou une copie) ?
    Salut DenXXX,

    Merci pour ta réponse ! Cependant il y a quelque chose que je ne comprends pas : comment est-ce possible de définir un objet Variable dans la classe Variable... Par contre cela m'a donné une idée : créer 2 nouvelles propriétés "OldNom" et "OldValeur". Ce n'est peut être pas la meilleure solution mais cela doit fonctionner ; je vais tester.

    Encore merci !

    EyeRobot

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par EyeRobot Voir le message
    Salut DenXXX,

    Merci pour ta réponse ! Cependant il y a quelque chose que je ne comprends pas : comment est-ce possible de définir un objet Variable dans la classe Variable... Par contre cela m'a donné une idée : créer 2 nouvelles propriétés "OldNom" et "OldValeur". Ce n'est peut être pas la meilleure solution mais cela doit fonctionner ; je vais tester.

    Encore merci !

    EyeRobot
    En effet je considère que t'as un objet DTO Variable et t'as une viewmodel VariableVM ce qui te donnerais +-

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class VariableVM
    {
        private Variable _Data;
        private Variable _OldData;
     
        public VariableVM(Variable data)
        {
            _Data = data;
            _OldData = new Variable(data);
        }
     
    }

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Points : 10
    Points
    10
    Par défaut DataGrid : comment conserver la source originale (ou une copie) ?
    Salut DenXXX,

    Merci pour ton aide ; ca marche impec' !

    EyeRobot.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/12/2010, 10h20
  2. Réponses: 6
    Dernier message: 01/12/2010, 13h30
  3. [MySQL 5] Conserver la syntaxe originale d'une vue
    Par J1 dans le forum Administration
    Réponses: 4
    Dernier message: 04/03/2010, 10h23
  4. Réponses: 6
    Dernier message: 29/05/2008, 15h02
  5. Comment conserver des tableaux javascript d'une page à l'autre ?
    Par Ekinoks dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/10/2007, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo