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 :

Recalculer une colonne de datagridview sans être géné par le tri


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut Recalculer une colonne de datagridview sans être géné par le tri
    Bonjour

    J'ai un datagridView qui m'affiche une sélection d'éléments d'une datatable via un filtre sur dataRowView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataView dtvCapteurs = new DataView(maConfig.DataSetConfig.Tables["Capteurs"]);
                    dtvCapteurs.RowFilter = "Idperiph = " + dataGridView1.Rows[2].Cells["Idperiph"].Value.ToString();
                    dtvCapteurs.Sort = "Priorité ASC";
    Maintenant je souhaite modifier la priorité des row du datagridview pour 2 choses
    -Toujours avoir la colonne "Priorité" sans doublons (10, 20,30,40,50,60...)
    -Pouvoir remonter ou descendre des lignes dans le datagridView.

    Problème : si je parcours mon datagridview pour recalculer chaque priorité, le tri déplace les lignes en cours de recalcul et du coup cela fausse le calcul
    voici le code de recalcul des "Priorités"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i = dataGridViewCapteurs.Rows.Count; i >0; i--)
                {
                   dataGridViewCapteurs.Rows[i-1].Cells["Priorité"].Value = i * 10 ;
                }
                maConfig.SauvegardeConfig();
    ce code fonctionne en cas d'ajout d'une ligne mais va créer des inversions en cas de retrait de ligne (parce que la première ligne à se faire renommer va se déplacer et ainsi perdre son ordre...

    Y a t-il un moyen de "figer" le datagrid view ? qu'il ne déplace pas les lignes en cours de recalcul des priorités ?

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour

    il serait peut-être plus "logique" de mettre à jour la source de données plutôt que l'afficheur.. comme ça, tu ferais ton opération sur la source
    et ensuite, via un update de la datagridview, tu aurais ta mise à jour...

    Sinon, peut-être que le BeginUpdate() de la dataGridview pourrait répondre à celà
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour
    Citation Envoyé par theMonz31 Voir le message
    bonjour

    il serait peut-être plus "logique" de mettre à jour la source de données plutôt que l'afficheur.. comme ça, tu ferais ton opération sur la source
    et ensuite, via un update de la datagridview, tu aurais ta mise à jour...
    Je ne comprends pas cette partie de réponse : mon datagriview est bindé à la datatable source, tout changement dans la datagridview est immédiatement répercutée sur la datatable et inversement, non ?
    Pou moi manipuler la datatable source aurait strictement le même comportement, sauf que là je manipule le datagridview parce que j'ai directement accés (QUE) aux enregistrements que je veux manipuler.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour

    Je deviens fou ; 2 jours sans trouver de solution et surtout aucune piste, faute de trouver des gens confrontés au même problème...bref il faut surement pas faire comme ca !

    Oublions les colonnes à recalculer, voici le besoin de base :

    J'ai un data set avec 1 table "Capteurs" qui possède un champ "IdCapteur" en numeroauto et un champ "Idperiph" qui correspond à des parents
    Je sélectionne un "periph", et ça m'affiche dans un datagridview bindé à un DataView filtré la liste des "Capteurs" qui ont le bon "IdPeriph".

    L'utilisateur doit pouvoir modifier l'ordre d'affichage des "Capteurs" dans le datagridView pour exprimer un ordre de priorité qu'il veut.
    Ensuite dans une moulinette il me faut pouvoir traiter tous les "Capteurs" dans un ordre strictement égal à l'ordre qu'à défini l'utilisateur.

    Pour cela faut il
    > ajouter une colonne "Priorité" comme j'ai commencé à faire ?(priorité que je n'arrive pas à calculer quand j'ai des ajouts, suppression ou déplacements de lignes)
    > gérer l'index des lignes dans le datarow ? comment gérer la source de donnée du datagridview et surtout son ordre d'affichage dans ce cas ??
    > autre chose ?


    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Je vais te donner les grandes lignes de comment j'aurais abordé le sujet en espérant que cela te donne quelques idées.

    Déjà le binding c'est pas mal du tout, mais de mon expérience perso il faut quand même garder la main sur une partie du système, surtout lorsque l'on veut faire des choses un peu spécial, ou disons plutôt avec un peu fonctionnel...C'est pour ça que, pour ma part, je l'utilise uniquement pour de l'affichage, pour plus de simplicité lorsque je crée mes interfaces.
    Je sépare mes couches, donc j'ai une couche d'accès aux données qui contient les ordres SQL et qui me retourne des listes d'objects (j'ai dans cette couche des DataTable, et rarement des DataSet mais ils ne quittent jamais cette couche), puis je récupère ces listes d'object que je bindes sur les datasources de mes interfaces. L'utilisateur modifie donc les objects bindés à travers l'interface et ensuite je peux redonner soit un object soit une liste d'object à ma couche d'accès aux données, qui va pouvoir faire les modifs en base de données.
    Ca c'est le grand principe, j'ai aussi un petit système sur mes objects métiers qui me permets de savoir directement si mon object a été modifié, et donc si je dois l'insert l'update le delete ou ne rien faire, mais c'est un autre sujet...

    Donc dans ton cas j'aurais une classe Capteurs avec une propriété genre NumOrdre, c'est celle la que l'utilisateur devra modifier pour donner l'ordre de traitement des capteurs.
    La difficultés sera donc la, faire une interface simple et fonctionnel qui te permet de définir le numéro d'ordre de traitement de tes capteurs. Pourquoi pas commencer par un truc simple :
    une datagridview avec tous les capteurs d'affichés, a coté tu as un usercontrol qui affiche les infos du capteur selectionné dans la datagridview, avec dedans une textBox ou tu peux saisir son numéro d'ordre.
    Résultat une fois ça en place tu pourras déjà modifier tes object Capteurs et donc ensuite trier ta liste de capteur ... Ici on sera déjà pas mal, ensuite à toi de gérer la saisir des numéros d'ordre en refusant un numero déjà utilisé, ou pas ... etc bref améliorer l'expérience utilisatrice ... mais ton fonctionnel devrait être en place.

    Bon code,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Bonjour et merci

    la modification des "capteurs" ne se fait pas directement dans le datagridview aujourd'hui mais dans un formulaire que je charge sur double click dans le datagridview et qui va enregistrer dans les datatable (la fameuse couche métier si je comprends bien). Ici effectivement j'ai mon champ priorité que je peux changer à volonté sans mon soucis de tri (mis à part que je peux avoir des doublons de priorité et donc ne plus être en capacité de trier).
    La modif des capteurs ne se fait pas directement dans le datagridView parce que les saisies sont un peu complexes avec des treeview de sélection, des tableaux, des combobox, une sorte de wizard en gros.

    le hic c'est que pour des raisons d'ergonomie justement il y a 1 truc que l'utilisateur aurait à faire dans le datagridview : le changement de priorité... si l'utilisateur devait ouvrir chaque ligne pour changer la priorité, sans avoir la visibilité de la priorité des autres capteurs ce serait l'enfer ; c'est pour ça que je prévois une flèche up et une down pour faire monter ou descendre les lignes.

    Et donc c'est là que ça coince, je ne peux pas passer par le couche métier qui traite 1 ligne... ou alors j'ai rien compris à la réponse

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    dans les datatable (la fameuse couche métier si je comprends bien)
    Non justement les dataTable reste dans la couche d'accès. Mais c'est pas le problème visiblement...

    sans avoir la visibilité de la priorité des autres capteurs ce serait l'enfer ; c'est pour ça que je prévois une flèche up et une down pour faire monter ou descendre les lignes.
    Ok, c'est vraiment pas c*n, j'aurais du y penser avant !
    Est ce que tu as une classe "Capteurs" ou équivalent, qui possède une propriété NumOrdre avec accesseurs publiques ?
    SI c'est pas le cas je te le conseil, et du coup tu pourrais depuis ta DataTable générer une liste d'object capteurs que tu bindes sur ta datagridview (ca aussi c'est peut être déjà le cas) après avoir initialisé la propriété NumOrdre de chaque object par la position qu'il a dans la liste.
    Puis à chaque appuis sur une des flèches tu modifie le numOrdre de l'object (et donc modifié tout les numOrdres des object présent dans la liste) puis tu rebinde la liste sur la datagridview...

    Tu pourrais également avoir une classe qui gère tous tes object capteurs et donc la répartition des NumOrdre de ceux-ci pour qu'ils restent cohérent entre eux, un peu sur le principe d'un carnet d'adresse qui contiendrais des nom de personnes ordonnés.

    Niveau classe métier justement tu en es ou ? tu as une classe Capteurs ?

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Pour le moment j'ai une classe capteur mais elle n'affiche pas de propriétés publiques, juste une dataset qui contient toutes les tables que la classe se charge de serialiser/deserialiser.

    Ce sont les tables du dataset de cette classe Capteur que je binde à mes datagridview, soit directement, soit via un dataview pour pouvoir faire un rowfilter.

    Si je comprends l'idée ce serait que ma classe mette à disposition des listes (ou datatables ?) intermédiaires qui permettraient de déconnecter l'affichage de la couche métier. La list ou table "affichage" serait mise à jour qu'aprés bidouillage/validation des données
    c'est ça ?
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut A lire avec un café !
    Pour le moment j'ai une classe capteur mais elle n'affiche pas de propriétés publiques, juste une dataset qui contient toutes les tables que la classe se charge de serialiser/deserialiser.

    Ce sont les tables du dataset de cette classe Capteur que je binde à mes datagridview, soit directement, soit via un dataview pour pouvoir faire un rowfilter.
    Bon là je t'avoue qu'on est pas vraiment sur ce que j'ai l'habitude de faire, du coup je serais pas forcément bien placé pour te donner la solution la plus rapide et efficace...
    J'ai l'impression que ta 'classe' Capteur est un peu comme une classe static qui contient toutes les données que tu as besoin, Si je ne me trompe pas tu n'a qu'un object Capteur lors de l'execution ? dans ton code il n'y a qu'un new Capteurs() qui est fait ?
    Dans mon fonctionnement il faudra que tu es autant d'object capteurs d'instancier qu'il y en a dans ta bdd.

    Plutôt que de longue prose je te donne un code que j'ai tapé vite fait, pas forcement parfait mais qui va illustrer pas mal ce que je te proposais. Je pense qu'on est loin de ce que tu as, donc a toi de voir ensuite ce que tu veux faire ou ce que tu peux faire...

    En gros tu aurais dans la couche métier :

    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
     
        public class Capteur
        {
            private int _identifiant;
            public int Identifiant { get { return this._identifiant; } }
            public string Designation {get; set;}
     
            public int NumOrdre { get; set; }
     
            public Capteurs(int id)
            {
                this._identifiant = id;
                this.Designation = string.Empty;
                this.NumOrdre = 0;
            }
     
        }
    Dans la couche accès aux données :
    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
     
    public class RepoCapteur : IRepoCapteur
        {
            List<Capteur> IRepoCapteur.GetCapteurs()
            {
                DataTable dt = null;//SQL - SELECT de tous les capteurs, retournés dans une DataTable avec un capteurs par row
                List<Capteur> lstCapteur = new List<Capteur>();
                foreach (DataRow r in dt.Rows)
                {
                    lstCapteur.Add(DataRowToObjectCapteur(r));
     
                }
                return lstCapteur;
     
            }
            private Capteurs DataRowToObjectCapteur(DataRow r)
            {
                Capteur capteur = new Capteur(Convert.ToInt32(r["IdCapteur"])); //IdCapteur = nom de la colonne qui contient l'id
                capteur.Designation = r["designationCapteur"].ToString().Trim();//designationCapteur = nom de la colonne qui la designation du capteur.
                return capteur;
            }
     
        }
    Maintenant dans ton interface tu peux faire

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    public partial class Form1 : Form
        {
            IRepoCapteur _repo;
            SortedDictionary<int,Capteur> _dicCapteur;
     
            public Form1()
            {
                InitializeComponent();
     
                _repo = new RepoCapteur();
     
                var lstCap = _repo.GetCapteurs();
                //J'ai mes capteurs en vrac dans une liste
                //Je vais leur attribuer un numero d'ordre par defaut.
                SortedDictionary<int, Capteur> dicCapteur = new SortedDictionary<int, Capteur>();
                int i = 1;
                foreach (Capteur capteur in lstCap)
                {
                    capteur.NumOrdre = i;
                    _dicCapteur.Add(capteur.NumOrdre, capteur);
                    i++;
                }
                AfficherCapteurs(dicCapteur);
     
            }
     
            public void AfficherCapteurs(SortedDictionary<int, Capteur> dicCapteur)
            {
    			//La je vais affiche les capteurs dans la datagridview dans l'ordre qu'ils sont dans le SortedDictionary et donc en fonction du numero d'ordre. 
                this._dicCapteur = dicCapteur;
                if (this._dicCapteur != null)
                    this.bindingSource1.DataSource = _dicCapteur.Values; //là c'est affiché dans le bon ordre
                else
                    this.bindingSource1.Clear();
            }
     
            private void btUp_Click(object sender, EventArgs e)
            {
    			//Click sur le bouton up, donc je recupere le selectionné et j'inverse leur position dans le dictionnary et leurs numero d'ordre.
                if(this.dataGridView1.SelectedRows.Count == 1)
                {
                    Capteur capteurUp = this.dataGridView1.SelectedRows[0].DataBoundItem as Capteur;
                    int index = capteurUp.NumOrdre;
                    var capteurDown = this._dicCapteur[index - 1];
    				capteurUp.NumOrdre = capteurDown.NumOrdre;
    				capteurDown.NumOrdre = index;
                    this._dicCapteur[index - 1] = capteurUp;
                    this._dicCapteur[index] = capteurDown;
     
                    AfficherCapteurs(this._dicCapteur);
                }
            }
        }
    En gros ce que je fais c'est de ne remonter que des objects métier dans l'UI, pas de DataSet ou DataTable, résultat à partir de la je n'ai plus a me soucier de la table de sont organisation toussa toussa ... mais uniquement de mes object métiers. Donc dans l'UI je commence par leur donner un numéro par defaut et d'afficher, ensuite l'UI se charge de changer les index et de les ré-afficher dans le bon ordre (en faite sur un clique up ou down tu ne fais que d'inversé le capteur sélectionné avec celui du dessous ou celui du dessus).
    Imaginons maintenant que tu voudrais enregistrer ces numéro d'ordres en base, tu pourrais dans la couche d'accès aux donnée (RepoCapteur) faire un fonction d'enregistrement des capteurs, par exemple tu parcours ta liste d'object Capteur pour faire un update en base de chacun d'eux.

    Hésite pas à demander si tu as des questions (seules les réponses peuvent être bête).

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  10. #10
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    Il va me falloir plus qu'un café ...

    mais je crois que j'ai pigé l'idée qui évidement me fait trembler puisque révolutionnaire au regard de mon code ; en tous cas j'ai compris la structure de l'exemple.

    va me falloir quelques jours pour intégrer le truc et essayer (en espérant ne pas écrouler mon château de carte actuel !)

    Merci beaucoup
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    oui oui, fait attention car si au final tu ne fais que de casser ton code existant pour un truc que tu ne maitrise pas ... c'est pas forcément super ! ca c'est à toi de voir !
    Si tu compte te lancer je te conseille d'isoler complétement la partie nouvelle méthode, de l'ancienne... Voir à l'idéal recommencer à 0, mais bon on a tous un chef !!!


    Mais ce schémas est grand classique de séparation des couches, dans la couche d'accès aux données tu ne t'occupe que de transformer les données des tables en object métier, donc c'est la qu'il y aura du SQL (et que là), ensuite dans ta couche métier tu as la logique de ton métier (un capteurs est forcément relié à un périphérique, il a forcément un identifiant, chaque capteurs a un numéro d'ordre de traitement.... etc) et ton interface elle ne fait que d'afficher les choses et de faire des appels aux méthodes des object métiers. Comme sa, suivant ou tu es tu n'a pas a te soucier des 'responsabilités' des autres couches, ce qui simplifie énormément le travail en le rendant maintenable et évolutif !
    Quand tu fais tes select ou tes updates, tu les écris limite mécaniquement, sans réfléchir à comment le métier fonctionne, quel est le numéro d'ordre qu'il faut que j'enregistre en base, non !!! Juste tu prends tes objects et tu fais des updates (bon on peut aussi être un peu plus exigeant et ne faire en base que ce qui est utile mais c'est pour la prochaine étape )
    Dans le metier pareil pas de soucis de comment sa se passe en bdd ou dans l'IU, pareil pour l'UI elle n'e fait que d'afficher, et elle n'a aucun lien avec la bdd, elle ne sait meme pas d'ou viennent les données, ou pourrait replacer la classe RepoCapteur par un RepoCapteurTXT (qui implémenterait toujours l'interface IRepoCapteur) et tout fonctionnerais pareil mais on irait chercher les infos dans un fichier .txt par exemple, avec des System.IO.ReadFile au lieu de select de SQL... et tu passerais de l'un a l'autre en modifiant une ligne de code...

    tu trouveras des tas de cours, tuto sur ces idées et sincèrement sur le petit exemple que tu nous donne je pense que ça colle plutôt bien et que tu pourrais facilement le mettre en œuvre, oui ça te prendre un peu de temps... mais il sera vite gagné lorsque tu appliqueras ces idées partout ...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  12. #12
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut
    J'ai la chance d'avoir un chef super méga cool, grand, beau... mais je vais faire joujou sur une appli bidon avant de taper dans mon truc parce que j'ai des clients à satisfaire quand même !

    J'ai déjà perdu investi une montagne d'heures à essayer de m'élever au dessus des bricolos que je codais depuis des années, les classes (autre que Form...) datatables, binding, sérialisation et autres c'est tout neuf pour moi.
    J'ai déjà acquis une certaine fluidité dans le vocabulaire et MSDN, je rentre dans une nouvelle aire.
    Merci beaucoup pour cet exemple qui m'aidera beaucoup, le "conceptuel" comme ça m'est pas facile à assimiler que les cours ; je comprends jamais où on veut m'emmener. Là je suis coincé sur la falaise, plus facile de comprendre pourquoi il faut mettre un piton dans la roche !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  13. #13
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 975
    Points
    1 975
    Par défaut de quoi me motiver à tout modifier plus rapidement ?
    Bonjour

    Petite question complémentaire parce que je crains que ce soit lié à la même chose et que du coup çà m'oblige à me lancer dans la grosse modif de suite...

    J'ai un datagridView dans lequel l’utilisateur peut saisir directement des choses (1 valeur et une case à cocher)

    comme les autres ce datagridview est bindé à une Datatable via un DataView pour filtrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataView dtvValeurs = new DataView(MonDataset.Tables["Valeurs"]);
                    dtvValeurs.RowFilter = "IdCapteur = " + TextBoxIdCapteur.Text;
                    dataGridView1.DataSource = null;
                    dataGridView1.DataSource = dtvValeurs;
    et si l'utilisateur fait une modif dans le datagridview et ferme la form directement, la modif qui vient d'être faite n'est pas prise en compte.

    Partout je vois qu'il faut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.EndEdit();
    que j'ai donc mis sur le FormClosing de ma ShowDialog.

    or en ce qui me concerne l'état de la Datatable bindée au datagridview ne change pas aprés l'execution du EndEdit() !
    J'ai tenter de forcer avant ou après un changement de CurrentCell
    J'ai tenté un validate de la form.
    J'ai tenté de donner le focus à un autre control que le datagridview
    j'ai essayé de faire un Acceptchanges sur la DataTable (mais comme elle n'est pas modifiée évidement ça ne change rien...)

    Comment puis-je faire valider/prendre en compte la modif en cours d’édition quand on quitte ainsi un datagridview ?

    PS : si je clique sur n'importe quelle cell avant de fermer la form tout se passe bien.

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/08/2008, 22h25
  2. Réponses: 10
    Dernier message: 29/05/2008, 18h14
  3. Réponses: 1
    Dernier message: 26/10/2007, 18h57
  4. Comment rendre invisible une colonne de datagridview
    Par frederix quest dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/05/2007, 18h12
  5. [VB.NET] Comment ajouter une colonne à un DataGridView ?
    Par Tarteens dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/05/2006, 18h32

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