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

C# Discussion :

Charger un datagridview avec une datatable et deconnecter


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Charger un datagridview avec une datatable et deconnecter
    Bonjour

    Est-il conceptuellement possible de charger un datagridview avec une datatable issue d'un query et de deconnecter apres cette datatable

    POURQUOI ?

    Parce que dans un cas precis, je me bat depuis une semaine avec un datagridview connecté sur lequel l'utilisateur dois faire des manipulation d'ordre sur une colonne : renumeroter, trier etc.

    C'est la seule manip permise dans ce DGV soit a la main soit par bouton permettant de choisir un pas de renumerotation (comme pour le vieux basic)

    Mais j'en arrive a la conclusion que c'est IMPOSSIBLE si je travaille avec un DGV bindé quoi que je fasse il y a toujours un moment ou tout explose
    Donc je me dis que ca irait peut etre mieux si le DGV est la seule entité en jeu quite a faire mes update a la main apres coup.

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Le truc a comprendre, c'est que la DGV ne contient rien. Elle n'est que la representation visuelle de la table (ou de la view s'il y en a une).

    Ton post est vague. Quelle interaction offres-tu a l'utilisateur ? Est-ce de la simple visu, ou bien y'a-t-il insertion / update en base ?

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Detail
    Je charge cette datatable avec un query join sur 2 tables T1 et T2

    De T1 j'ebarque trois champs pour affichage mais seule un ordinal "ordre" m'intéresse

    Le but c'est que l'utilisateur puisse renumeroter les row pour en changer la sequence d'exploitation

    Donc toutes les colonnes sont read only sauf cette colonne d'ordre
    L'utilisateur peut modifier 1,2,3,4,5 en 3,2,1,4,5 (par exemple)

    Mais si la liste est longue et qu'il veut inserer 77 entre 2 et 3 je propose aussi un bouton renum avec un step : donc pour faire 10 20 30 40 50 etc
    Apres c'est plus faclie de donner a 770 la valeur 25

    Apres coup il fait update
    Derriere l'update je retrie et je renumérote a nouveau 1,2,3 etc
    Ensuite je resauve dans la base
    Pas avec SqlCommandBuilder (ca marche pas avec un query join)
    Mais a la main dans une boucle

    Et bien le process de renumérotation pete les plomb une fois sur 3, ca cree des double ou il saute un row etc.

    J'ai tout essayé : disabler les tri, ne travailler en automatique QUE sur la datatable, ca fini toujours par foirer

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    De ce que je comprends, ton souci n'a rien a voir avec la Datagridview, non ? Ta Datatable represente deux tables de bases ; elle n'a qu'une colonne editable, soit par l'utilisateur (via la grille), soit par ton code (il faut que ton code de renumerotation bosse sur la datatable, la grille est mise a jour des modifs de la table).

    Je vois pas bien ce qui pose probleme.

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Malheureusement je ne vois pas vraiment non plus ce qui pose proobleme mais j'ai deux tros pistes

    1- Au debut je faisais les modif automatique dans le DGV : j'ai vite compris que ca posait probleme je les ais donc fait directement dans la datatable
    Astuce il faut acceder les bons rows de la datatable qui n'est evidemment pas triée comme le DGV

    Mais meme malgré ca ca cree des probleme
    - Trou dans la renumérotation
    - Cration de doubles

    Autre situation troublante : malgré avoir forcé le DGV notsortable il arrive qu'en introduisant une valeur manuellement, le DGV se retrie automatiquement

    En résumé la situation est asser cahotique j'ai pourtant l'habitude du debuguage mais la je déclare forfait provisoirement

    AUTRE bizarrerie tu verra

    Voici ma renumerotation automatique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dgv_rit.Columns["order1"].SortMode = DataGridViewColumnSortMode.NotSortable;
          Order = 1;
          for (int i = 0; i < dgv_rit.Rows.Count; i++)
          {
            if (dgv_rit.Rows[i].Cells["X"].Value == null) break;
            DataRowView drv = (DataRowView)dgv_rit.Rows[i].DataBoundItem;
            DataRow dr = drv.Row;
            dr["order1"] = Order;
            Order += Step;
          }
          dgv_rit.Refresh();
          dgv_rit.Columns["order1"].SortMode = DataGridViewColumnSortMode.NotSortable;
    Et maintenant le code Update
    Il i a aussi un truc de fou car j'ai été obligé de faire l'update dans une boucle "a la main" la commande automatique (en commentaire) ne produisait AUCUN résultat dans la DB

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
          dgv_rit.Sort(dgv_rit.Columns["order1"], ListSortDirection.Ascending);
          dgv_rit.Columns["order1"].SortMode = DataGridViewColumnSortMode.NotSortable;
     
          int newOrder=1;
          for (int i = 0; i < dgv_rit.Rows.Count; i++)
          {
            if (dgv_rit.Rows[i].Cells["X"].Value == null) break;
            DataRowView drv = (DataRowView)dgv_rit.Rows[i].DataBoundItem;
            DataRow dr = drv.Row;
     
            if ((int)dr["order1"] != newOrder)
            {
              dr["order1"] = newOrder;
            }
            newOrder++;
          }
     
          MySqlCommand cmd;
          string xCmd;
          DataTable dtr = dsRit.Tables[0];
     
          for (int i = 0; i < dtr.Rows.Count; i++)
          {
            DataRow dr=dtr.Rows[i];
            xCmd = "UPDATE tours SET order1=" + dr["order1"].ToString() + " WHERE id=" + dr["id"].ToString();
            cmd=new MySqlCommand(xCmd, MyConn.conn);
            int nUpd = cmd.ExecuteNonQuery();
          }
     
     /*
          adaRit.UpdateCommand = new MySqlCommand("UPDATE tours SET order1=?order1 WHERE id=?id", MyConn.conn);
          adaRit.UpdateCommand.Parameters.Add("?order1", MySqlDbType.Int32, 11, "order1").SourceVersion = DataRowVersion.Original;
          adaRit.UpdateCommand.Parameters.Add("?id", MySqlDbType.Int32, 11, "id").SourceVersion = DataRowVersion.Original;
          Step = adaRit.Update(dsRit);
     */

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Tres bizare : je cvommence a comprendre
    Bonjour;

    Je commence a comprendre un des GROS problème que j'ai en tentant de renuméroter une colonne de DGV
    Conceptuellement si je renumerote c'est en suivant l'ordre donné par l'indice d'ordre
    Donc a priori je trie juste avant la renumerotation et puis j'essaye de disabler le tri automatique avant la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         dgv_rit.Sort(dgv_rit.Columns["order1"], ListSortDirection.Ascending);
          dgv_rit.Columns["order1"].SortMode = DataGridViewColumnSortMode.NotSortable;
    Mais ca ne marche pas, si je fais ca c'est la catastrophe car le tri reste actif et chaque valeur que je modifie par programme se retrie automatiquement et tout part en couille !
    Si par contre je ne fais pas le tri juste avant c'est bon ! Malheureusement pas satisfaisant dans le principe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            DataRowView drv = (DataRowView)dgv_rit.Rows[i].DataBoundItem;
            DataRow dr = drv.Row;
            dr["order1"] = Order;
            Order += Step;
    Donc : comment peut on trier un DGV et empecher le tri automatique !!

Discussions similaires

  1. [Débutant] Remplir une DataGridView avec un DataTable
    Par collisionv dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/04/2014, 21h33
  2. [c#] Remplir un DataGridView avec plusieurs DataTable
    Par macfred dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2010, 11h02
  3. Réponses: 1
    Dernier message: 23/04/2007, 15h07
  4. Réponses: 11
    Dernier message: 15/11/2006, 16h52
  5. Problème pour charger un set avec une clé étrangère
    Par sylvainv18 dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/11/2006, 18h08

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