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

VB.NET Discussion :

Enregistrement dans un Datagrid, CollectionViewSource J'y suis presque ><


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut Enregistrement dans un Datagrid, CollectionViewSource J'y suis presque ><
    Bonjour,

    Après de longue recherche, j'ai pu repérer que les "CollectionViewSource " étaient la méthode la plus transparente pour faire fonctionner mon datagrid
    J'affiche 1 champs et lorsque je le modifie il ne s'enregistre pas... Je pense que je doit enregistrer sur le mauvais dataContext Mais je sais pas comment faire...

    J'ai une liaison avec mon LINQ To SQL et une base de donnée SQL Server
    Et j'ai fait une génération automatique des objets
    Voici le code Behind :

    Code : 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
    Class MainWindow
     
        Dim _DbAnance As DataClasses1DataContext
        Private Property T_ARBO_FALViewSource As CollectionViewSource
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            _DbAnance = New DataClasses1DataContext
        End Sub
        Private Sub DataGrid1_CellEditEnding(ByVal sender As Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs)
            _DbAnance.SubmitChanges()
        End Sub
     
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
            T_ARBO_FALViewSource = CType(Me.FindResource("T_ARBO_FALViewSource"), System.Windows.Data.CollectionViewSource)
            'T_ARBO_FALViewSource.Source = New ObservableCollection(Of T_ARBO_FAL)(From Fal In _DbAnance.T_ARBO_FAL)
            T_ARBO_FALViewSource.Source = _DbAnance.T_ARBO_FAL
        End Sub
     
    End Class
    Voici le XamL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ....
    	<Window.Resources>
    		<staticData:FalList  x:Key="FalList"/>
    		<CollectionViewSource x:Key="TASKViewSource" d:DesignSource="{d:DesignInstance staticData:TASK, CreateList=True}" />
            <CollectionViewSource x:Key="T_ARBO_FALViewSource" d:DesignSource="{d:DesignInstance staticData:T_ARBO_FAL, CreateList=True}" />
        </Window.Resources>
    	<Grid x:Name="GridMain" RenderTransformOrigin="0.495,0.536" Height="728" Width="1128" DataContext="{StaticResource TASKViewSource}">
    		<DataGrid AutoGenerateColumns="False" Height="364" HorizontalAlignment="Left" Margin="96,163,0,0" Name="DataGrid1" VerticalAlignment="Top" Width="801" Grid.ColumnSpan="2" Grid.RowSpan="2" ItemsSource="{Binding Source={StaticResource T_ARBO_FALViewSource}}" CanUserAddRows="True">
    			<DataGrid.Columns>
    				<DataGridTextColumn Binding="{Binding Path=FAL_NAME}" Header="Nom de la tache" />
                </DataGrid.Columns>
    		</DataGrid>
    	</Grid>
    ...
    Il y a pas une erreur avec _DbAnance ? alors que j'utilise une CollectionViewSource ?

    Je cherche dans tous les sens mais je suis un peu perdu ...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je me demande si la modification n'est pas appliquée à l'objet après l'évènement CellEditEnding... si c'est ça, le SubmitChanges ne fait rien, puisque la valeur n'a pas encore changé.

    Pour vérifier, essaie de mettre un point d'arrêt dans l'évènement, et regarde les propriétés de l'objet pour voir si ça a effectivement changé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub DataGrid1_CellEditEnding(ByVal sender As Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs)
            Dim obj As T_ARBO_FAL = CType(e.Row.DataContext, T_ARBO_FAL)
            ' Met un point d'arrêt ici et regarde la valeur de obj
            _DbAnance.SubmitChanges()
        End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    Merci beaucoup après avoir posté j'ai tout refais et ça enregistre .... j'avais du faire une erreur quelque part... Mais pas mal le debug

    Sinon je me demandais à quoi ça servait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_ARBO_FALViewSource.Source = New ObservableCollection(Of T_ARBO_FAL)(From Fal In _DbAnance.T_ARBO_FAL)
    Et qu'est ce que ca m'apporterait de plus que faire cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_ARBO_FALViewSource.Source = _DbAnance.T_ARBO_FAL
    Est-ce que ma façon d'enregistrer serait la même ?

    Merci beaucoup pour ton aide !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par lerieure Voir le message
    Sinon je me demandais à quoi ça servait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_ARBO_FALViewSource.Source = New ObservableCollection(Of T_ARBO_FAL)(From Fal In _DbAnance.T_ARBO_FAL)
    Et qu'est ce que ca m'apporterait de plus que faire cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_ARBO_FALViewSource.Source = _DbAnance.T_ARBO_FAL
    Si tu ajoutes un élément à une ObservableCollection par le code, l'interface graphique le détecte et affiche automatiquement le nouvel élément. Par contre ça ne te dispense pas d'ajouter aussi l'élément au DataContext, sinon il ne sera pas enregistré en base...

    Citation Envoyé par lerieure Voir le message
    Est-ce que ma façon d'enregistrer serait la même ?
    Oui

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    Ok ! Donc si je comprend bien peu importe ce que je donne à mon datagrid
    Pour enregistrer dans ma base de données, il faut toujours faire un datacontext sur sa source qui est dans mon cas _DbAnance ?

    Dernière chose, cela devrait faire l'objet d'un nouveau sujet mais j'ai une problème qui traine depuis un moment... toujours à cause de mon problème de compréhension sur l'environnement...

    J'ai donc mon T_ARBO_FAL comme objet qui est mappé sur ma base de données
    et je veux faire une combobox pour pouvoir lister mes FALs (Chaine de montage) depuis mon objet TASK (Tâche) donc j'ai un lien FAL_ID entre les deux tables et mon Datagrid est binder sur TASK

    donc en XAML j'ai fait ceci (Générer automatiquement par mon interface graphique et j'ai selectionné les sources à binder qui doivent être du coup fausses)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <DataGridComboBoxColumn Header="Header" SelectedItemBinding="{Binding Path=FAL_ID}" SelectedValueBinding="{Binding Path=T_ARBO_FAL.FAL_ID}" TextBinding="{Binding Path=T_ARBO_FAL.FAL_NAME}" />
    Le résultat est vide et lorsque j'édite ma combobox est vide ...

    aurais tu une idée ?

    Et merci encore, ce sont des interrogations que je me pose et je trouve pas de réponse. Avec ce que je trouve sur le net, ca marche pas

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Enlève le "T_ARBO_FAL." de tes bindings, vu que ton DataContext est déjà un objet T_ARBO_FAL. Et enlève le SelectedItemBinding, qui entre en conflit avec SelectedValueBinding.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <DataGridComboBoxColumn Header="Header" SelectedValueBinding="{Binding Path=FAL_ID}" TextBinding="{Binding Path=FAL_NAME}" />

    Par contre il faut aussi que tu affectes un ItemsSource au DataGridComboBoxColumn, sinon il sera toujours vide

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

Discussions similaires

  1. [Débutant] Souci d'enregistrement dans un datagrid
    Par Attila54 dans le forum VB.NET
    Réponses: 6
    Dernier message: 15/02/2012, 20h48
  2. Réponses: 2
    Dernier message: 13/03/2009, 17h28
  3. Réponses: 3
    Dernier message: 11/09/2007, 14h00
  4. ajout dynamique d'enregistrements dans un datagrid
    Par sb.aida dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/04/2007, 14h10
  5. [VB.NET]Suppression d'un enregistrement dans un DataGrid
    Par San Soussy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/06/2005, 10h30

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