Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion alarme

Sujet résolu
    18 mars 2021 à 8:28:11

    Bonjour, je voudrais créer une alarme dans mon projet C# or étant complétement novice je ne sais pas du tout comment m'y prendre.

    je suis censé recevoir des données en continu dans ma DataGridView que j'ai conçu avec un fichier bindingsource.

    je voudrais donc que dès qu'une nouvelle données apparait dans ma DataGridView atteint un certain seuil ca déclenche une alarme (son) que j'arrêterais avec un autre bouton. 

    au passage si vous savez comment réussir à faire une courbe avec livechart sur mon datagridview je suis preneur.

    ne soyez pas trop dur avec moi, je suis vraiment novice dans ce domaine

    merci d'avance ^^

    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2021 à 9:00:01

      Question assez vague.

      Qu'est-ce que vous avez déjà essayé ? (avec du code si possible)

      Avez-vous déjà découpé le problème ?

      Quels sous-problèmes vous pose de nouveau une difficulté ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        18 mars 2021 à 10:09:18

        pour l'alarme j'ai déjà essayé dans un premier temps de faire une alarme avec un messagebos (plus simple pour les tests)

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
                {
                    int NbLigne = this.dataGridView1.Rows.Count - 1;
                    if (NbLigne != 0)
                    {
                        for (int j = 0; j < NbLigne; j++)
                        {
                            int valeur = Convert.ToInt32(dataGridView1.Rows[j].Cells[1].Value.ToString());
                            if (valeur >= 30)
                            {
                                MessageBox.Show("ALED");
                            }
                        }
                    }
                }

        le problème c'est que là c'est configuré quand on entre manuellement les données dans le dataGridView or comme je l'ai dit les données je suis censés les recevoir et les insérer par programmation dans le datagridView (ce qui est aussi un problème puisque je ne peux pas insérer des données par programmation quand je suis en BindingSource

        je sais que ma boucle est for est mal fichu, l'idéal ce serait que dès qu il y a une nouvelle ligne insérer ca varifie celle-ci.

        -
        Edité par BerserkGuts 18 mars 2021 à 11:18:55

        • Partager sur Facebook
        • Partager sur Twitter
          18 mars 2021 à 14:54:32

          >avec un fichier bindingsource.

          C'est à dire ?

          Si vous avez bien fait du DataBinding, votre source de données doit très probablement avoir au moins un événement qui se déclenche en cas de modification des données.

          Une DatagridView est un contrôle graphique et ne devrait avoir aucun traitement autre que l'interaction avec l'utilisateur "final". Je vous conseille donc d'utiliser sa DataSource comme déclencheur de votre traitement et non la DatagridView elle-même.

          C'est quoi le type de la DataSource de votre Datagridview.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            18 mars 2021 à 15:22:25

            ma source de données m'a seulement permis de créer mes colonnes sur mon DataGridView, je ne savais pas que je pouvais créer ma gestion d'alarme depuis celle-ci. 

            est-ce que je peux aussi insérer les données que j'aurais récupéré depuis une carte Arduino et une Raspberry depuis la DataSource ? 

            Ma DataSource est une classe : 

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.Threading.Tasks;
            
            
            namespace Mysql
            {
                class Flux
                {
                    public string Arduino_Raspberry { get; set; }
                    public double Valeur { get; set; }
                    public int Heure { get; set; }
                }
            }
            

            • Partager sur Facebook
            • Partager sur Twitter
              18 mars 2021 à 17:03:16

              Par DataSource, c'est des objets "Collection" comme DataSet/DataTable/etc..., ce qui peut être mis dans un la propriété DataSource de votre DataGridView, dont je faisais mention.

              "Flux" n'est pas une DataSource, c'est une classe qui peut être le type des éléments stockés dans une DataSource, pas la DataSource elle-même.

              >m'a seulement permis de créer mes colonnes sur mon DataGridView

              C'est que vous vous servez mal/pas assez de cette DataSource.

              >est-ce que je peux aussi insérer ... carte Arduino et une Raspberry depuis la DataSource ?

              Pourquoi vous ne pourriez pas ? C'est quoi le type de votre DataSource (et pas le type des éléments stockées dans la DataSource) ?

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                18 mars 2021 à 18:58:32

                Ce que j'avais fais c'était de créer une nouvelle classe, ici "Flux", puis je l'ai ajouter comme source de donnée en tant qu'objet. J'ai beau cherché partout, me renseigner partout je n'ai rien trouvé qui ressemble à DataSet,etc.... j'ai eventuellement treouvé List en faisant personnalisé sur la dataGridView; je sais pas si c'est bon.

                si c'est pas le cas, tu peux me dire exactement ou je dois trouver cette information stp

                j'ai cru voir, comprendre qu'il fallait déclarer les DataSet et autre en programmation, chose que je n'ai pas fais.

                En essayant de faire cette alarme depuis ma classe Flux, les termes correspondant à la DataGridView ne sont pas du tout reconnu, ce qui est logique en réfléchissant, du coup je me retrouve dans une passe 😒 

                -
                Edité par BerserkGuts 18 mars 2021 à 21:21:45

                • Partager sur Facebook
                • Partager sur Twitter
                  19 mars 2021 à 12:42:55

                  Il y a deux choses bien distinctes.

                  Il y a la possibilité pour le Designer graphique des DataGridView de déduire le nombre et le type des colonnes qui seront affichées/gérées en donnant, via le Designer, une DataSource contenant une collection d'élément typé, et le Designer configurera le DataGridView (via du code "auto-généré" par le Designer) pour qu'il affiche "correctement" cette collection d'élément typé. (Après, si le Designer graphique arrive à faire son taf juste avec un "Flux" et pas une collection de "Flux", c'est fort probable ; ajouter une collection autour d'un seul élément, c'est trivial en génération de code, mais moi j'ai jamais essayé parce que c'est pas super "logique")

                  Mais il y a aussi le concept même de DataBinding (via DataSource) qui permet d'être notifié de modifications apportées à la DataSource via des "event" de ces DataSources. Et là, il n'y a rien d'automatiquement géré par le Designer. La mise à jour automatique de l'affichage des données en cas de modification des données est gérée directement par le composant graphique DataGridView, que le Designer est configuré la DataGridView pour l'affichage d'une collection d'un type précis ou pas.

                  Mes remarques et suggestions ont été faites dans le cadre de la 2ème "chose" : le DataBinding, pas le Designer. Cela ne s'adosse pas une customisation à un type précis via le Designer mais à l'utilisation des "event" de type de collection "évoluées" comme les DataSet/DataTable etc (et pas les List ;)), typée ou pas.

                  Pour avoir l'avantage des 2 mondes, il faut des DataSet/DataTable typées et, sauf erreur de m'a part, il existe toujours dans Visual Studio un Designer de DataSet pour facilement créer ces classes de DataSet (et DataTables embarquées) typés.

                  Le Designer graphique ne devrait être utilisé que pour les aspects d'IHM, car une DataGridView ne devrait gérer que cela, pas de mécanisme métier.

                  Une simple alarme a de bonne chance de n'être qu'un truc d'IHM et dont il peut être "legit" de faire ces choses (cf. ci-après, paragraphe suivant) dans une classe dérivée d'une DataGridView, ou plus simplement dans le formulaire hôte de la DataGridView. Mais si cela a des répercutions autres que graphique/sonore, je vous conseille chaudement de faire cela dans la couche métier de votre application et non dans la couche d'IHM (Form + Contrôles type DataGridView).

                  Le travail sera le même, quel que soit la couche utilisée pour son implémentation grâce à l'utilisation de collections évoluées comme des DataSet ou DataTable. Cela se résume à mettre en place des "delegates/fonction de callback" sur les événements des DataSet ou DataTable qui vous intéresse, pour pouvoir réagir aux modifications de données dans le DataSet ou la DataTable, par exemple. Il faut le faire au niveau du DataSet/DataTable et non au niveau de la DataGridView. La DataGridView aura le DataSet/DataTable en tant que DataSource, mais c'est la DataSource qu'il faut "écouter", pas la DataGridView.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                    19 mars 2021 à 17:38:41

                    Merci beaucoup pour ces informations, je vais essayer tout ça je reviendrais si je bloque à nouveau. 

                    vous gérez ;)

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Gestion alarme

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown