none
utilisation d'un databind pour calcul

    Discussion générale

  • Bonjour, j’apprends en tâtonnant (a vrai dire je me sers d'un logiciel excel que je recréer en C# pour base) le C# avec visual studio.

    Je me heurte a un problème. j'ai une base de donnée SQL server a disposition, je veut extraire les données pour les mettre dans un label. J'utilise un tableAdapteur qui va chercher la dernière valeur ajouté dans la base et l'afficher sur mon label.

    Mais j'ai besoin d'un deuxième label qui doit afficher une valeur calculer a partir de cette même valeur. (en gros je doit multiplier cette valeur par 1.5 pour obtenir la deuxieme valeur) et je doit afficher cette valeur dans un label différents.

    j'ai bien essayer de mettre dans le code une variable qui recupère le label.text mais je n'arrive pas a faire d'opération ou quoi que ce soi d'autre.

    Une petite piste pour un petit débutant? :)

    Cordialement,

    Mika.B

    jeudi 2 juin 2016 21:14

Toutes les réponses

  • Bonjour Mika.B,

    Vous récupérez une valeur numérique depuis votre base de données et vous souhaitez effectuer une multiplication par 1.5 pour afficher le résultat dans un deuxième label.

    Il suffit de récupérer la valeur en sortie de base ou directement du Label est de la caster vers son type numérique, par exemple :

    double numValue = double.Parse(Label1.Text);
    double newValue = numValue * 1.5;
    Label2.Text = Convert.ToString(newValue);

    Bien sûr, si vos conversions de types peuvent engendrer un risque, n'hésitez pas à utiliser TryParse().

    vendredi 3 juin 2016 05:50
  • Bonjour,

    Vous pouvez nous montrer le code de récupération de la valeur et préciser si c'est un projet WPF, Windows Forms ?

    Et vous parlez de DataBind dans le titre mais pas dans le contenu ?

    Si c'est par exemple avec un DataTable, vous devez avoir (ligne 15, colonne 5, en supposant que c'est un integer comme valeur) :

    var value = (int) dataTable.Rows[10][5];

    Donc :

    label1.Text = value.ToString();
    label2.Text = (value * 1.5).ToString();


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 3 juin 2016 07:16
  • Bonjour,

    Désolé pour l’imprécision de mon post. C'est un projet windows Form.

    J'ai un "veloDataSet" qui contient le tableAdapter LAST_MESURE avec pour requête SELECT qui va sélectionner ma dernière mesure.

    sur mon label1 j'utilise dans les propriétés l'option databinding pour récupérer la valeur.

     this.label79.AutoSize = true;
                this.label79.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.lASTMESUREBindingSource, "donnees", true));
                this.label79.Location = new System.Drawing.Point(341, 65);
                this.label79.Name = "label79";
                this.label79.Size = new System.Drawing.Size(24, 13);
                this.label79.TabIndex = 22;
                this.label79.Text = "test";
                this.label79.Click += new System.EventHandler(this.label79_Click);

    Merci de votre aide.

    vendredi 3 juin 2016 11:43
  • Il faut récupérer la donnée pour votre 2ème labels.

    D'après ce que je comprends, vous devez avoir les contrôles de données du Framework (DataSource & co). Donc vous devez avoir un event quand il change de ligne dans le datasource.

    Dans cet event, récupérez la donnée et faites le code comme écrits plus haut.

    (désolé mais ca fait tellement de temps que j'ai plus fait de Windows Forms ;-))


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 3 juin 2016 11:54
  • Rebonjour,

    désolé pour le temps de réponse mais weekend oblige. :)

    oui effectivement, ce que je ne comprend pas c'est où ce trouve cet event, j'ai beau chercher je n'arrive pas à trouver.

    En tout cas merci du temps que vous m'accordez.

    lundi 6 juin 2016 19:24
  • Bonsoir Mika.B,

    Vous devez ajouter en cinquième argument à votre binding la mode permettant de mettre à jour la valeur lorsque la donnée est modifié :

    DataSourceUpdateMode.OnPropertyChanged

    Donc :

    this.label79.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.lASTMESUREBindingSource, "donnees", true, DataSourceUpdateMode.OnPropertyChanged));

    lundi 6 juin 2016 19:48
  • L'ajout du parametre me donne un message d'erreur : Le nom 'DataSourceUpdateMode' n'existe pas dans le contexte actuel.

    j'ai beau chercher sur internet je ne trouve rien(qui fonctionne du moins) :/

    jeudi 9 juin 2016 19:17