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

Accès aux données Discussion :

[LINQ to SQL] Modification dans un datagridview


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut [LINQ to SQL] Modification dans un datagridview
    Déjà bonjour à tous.
    Depuis le temps que je parcours ce forum, je viens pour la première fois vous poser une question (car vraiment, je ne trouve pas ...)

    J'utilise VS2008pro en vb.net.
    Je crée un projet avec un Form et un DataClasse.
    Dans mon DataClasse, je mets 2 tables de SQLServeur2005, ces deux tables étant associées entre elle correctement.

    (Dans la table fnc, le champ liée devrai se nommer "num_per", mais c'est quelqu'un d'autre qui à créer la table, et je ne peu plus le modifier.)

    Mon but au final étant de pouvoir modifier directement les champs en visuel dans un datagridview, puis d'enregistrer en base les modifications apporté avec le simple appel de "SubmitChanges()"


    Je fais ma requête (linq) sur FNC, en indiquant les champs que je souhaite voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.DataGridView1.DataSource = From a In bd.fnc _
                                   Select numero = a.numi_fnc, nom = a.liste_personnel.nom_per, description = a.des_fnc
    La jointure ce fait bien automatiquement, les 3 colonnes apparaissent, mais le datagridview est alors automatiquement bloqué, je ne peux rien modifier en visuel. (Donc ce cas ne répond pas à mon besoin)

    Après de nombreux tests, j'ai remarqué que mon datagridview reste modifiable uniquement si je ne fait pas un "select" dans ma requête linq. Dans ce cas, l'appel de SubmitChanges() permet bien d'enregistrer en base les modifications apportés.

    Donc je refait la même requête sans le "select",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridView1.DataSource = From a In bd.fnc
    Alors le datagridview est modifiable (et enregistre bien les modifications), mais problème : j'ai une colonne nommé "liste_personnel" qui contient dans chaque case : "test2.liste_personnel". Cependant en observant le log de LINQ, je vois bien que le programme est tout prés de réussir ! Dés que j'affiche en visuel la colonne "liste_personnel", linq requête ma base pour récupérer les infos (uniquement celle visible), et voici le log :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT [t0].[num_per], [t0].[nom_per]
    FROM [dbo].[liste_personnel] AS [t0]
    WHERE [t0].[num_per] = @p0
    -- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [46]
    -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8
     
    SELECT [t0].[num_per], [t0].[nom_per]
    FROM [dbo].[liste_personnel] AS [t0]......
    C'est bien la bonne requête, mais il faudrait cependant que le select porte uniquement sur "nom_per" et pas sur tous les champs, afin je pense de correctement s'afficher dans mon datagridview.

    Quelqu'un aurai une solution ou une piste pour ce problème ? je sent que je ne suis pas loin, mais vraiment, je ne trouve pas...
    Merci d'avance pour votre attention.




    J'ai également essayé en utilisant une Vue dans SQLServ, une vue n'est pas bloqué dans mon datagridview, mais les modifications apportés ne sont pas enregistrés en base quand j'appel SubmitChanges() (alors que c'est possible de modifier un champ dans le résultat d'une vue sous SQLservManager, mais c'est une autre histoire)
    Images attachées Images attachées  

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut Select
    En fait, pour que les données soient modifiable, on peut utiliser 'select a', mais sans spécifier de champs particulier.

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Effectivement c'est bien ce que j'en est conclus.

    Le 'select a' fait la même chose que si on n'écrit pas de 'select' (dans les 2 cas, tout est sélectionné)

    Il faut donc s'adapter. Si on n'a pas de jointures entre tables, alors on cache les colonnes qui ne nous intéresse pas

    Si on a des jointures, il faut s'adapter. Moi (pour l'exemple que j'avais donné) j'ai pré-remplis des combobox dans la colonne correspondante avec les infos de ma table liste_personne ('nom_pers' en DisplayMember et 'num_pers' en ValueMember), puis j'ai fait un simple 'select a' sur ma table fnc.
    Ce n'est pas le plus simple, mais ça marche très bien maintenant, toutes les modifs sont bien automatiquement prisent en compte.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/12/2010, 13h42
  2. Tester s'il y a des modifications dans ma dataGridView
    Par Hello_World dans le forum Linq
    Réponses: 8
    Dernier message: 31/08/2009, 08h36
  3. Réponses: 1
    Dernier message: 16/06/2009, 11h18
  4. VB.Net - Comment détecter les modifications dans un Datagridview
    Par novice123 dans le forum Windows Forms
    Réponses: 17
    Dernier message: 19/12/2008, 16h57
  5. Réponses: 2
    Dernier message: 16/12/2008, 16h16

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