Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Dans un document de la gestion commerciale, placer un UserControl contenant des boutons permettant d'ajouter un article

0000002195     -      18/03/2014

L'objet de cette programmation est d'ajouter un userControl contenant différents boutons, qui permettront chacun d'ajouter un article déterminé dans la vente ou l'achat en cours. Cette fonctionnalité peut être rencontrée en répétant ce paramétrage. Toutefois, dans le cadre d'un développement plus ambitieux, cette nouvelle approche offrira nettement plus de souplesse en termes de programmation.

Ce paramétrage est construit au départ du concept de l'ajout d'objets personnalisés dans les écrans personnalisables.

Pour simplifier cet exemple, nous le limitons à 3 boutons qui seront placés sur un UserControl qui implémente l'interface MercatorUi.MovableControls.Interfaces.IMovableControl. Par facilité, dans le haut du code, nous associons à chaque bouton l'identifiant (S_ID) d'un article en le plaçant dans sa propriété "Tag".

gescombuttons

Le code de cette programmation est le suivant :

Zoom
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace GescomButtons
{
    public partial class GescomButtonsUserControl : UserControl, MercatorUi.MovableControls.Interfaces.IMovableControl
    {
        public GescomButtonsUserControl()
        {
            InitializeComponent();
            // on "cache" le s_id de l'article dans le tag du bouton correspondant
            button1.Tag = "618173914H";
            button2.Tag = "618173915I";
            button3.Tag = "618173916K";
        }


#region propriétés requises par IMovableControl

        // la Form qui héberge ce MovableObject
        private MercatorUi.MovableControls.Interfaces.IFormForMovableControls _form = null;
        public MercatorUi.MovableControls.Interfaces.IFormForMovableControls Form { get { return _form; } set { if (_form == null) _form = value; } }


        // indique que le contrôle est à la disposition de l'utilisateur : tous les évènements du style "valueChanged" sont causés par l'utilisateur, pas par Mercator
        private bool _userMode = false;
        public bool UserMode { get { return _userMode; } set { _userMode = value; } }

        internal bool afterDone = false;
        public bool AfterDone { get { return afterDone; } set { afterDone = value; } }
        
        private List<MercatorUi.MovableControls.MovableExpression> _expressionsToRefresh = null;
        public List<MercatorUi.MovableControls.MovableExpression> ExpressionsToRefresh { get { return _expressionsToRefresh; } set { _expressionsToRefresh = value; } }

#endregion


#region méthodes requises par IMovableControl

        public void OnAfterRead(EventArgs e)
        {
        }

        public void OnBeforeWrite(EventArgs e)
        {
        }

        public void OnAfterWrite(EventArgs e)
        {
        }

#endregion

        private void button1_Click(object sender, EventArgs e)
        {
            addItem(sender);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            addItem(sender);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            addItem(sender);
        }

        private void addItem(object sender)
        {
            Button button = (Button)sender;
            string s_id = button.Tag.ToString();
            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)_form;
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = billingForm.BillingEngine;
            if (billingEngine.ReadOnly) // si l'utilisateur n'a pas le droit de modifier ce document
                return;
            int n = billingEngine.AppendLine(true); // le paramètre true permet de ne pas créer une nouvelle ligne si la dernière ligne est vide
            if (billingEngine.InsertItem(s_id, billingEngine.LIGNES.Rows[n]))
            {
                n = billingEngine.AppendLine();  // ajouter une nouvelle ligne vide
                billingForm.LinesEditor.Grid.CurrentCell = billingForm.LinesEditor.Grid.Rows[n].Cells[0]; // activer la première cellule de la ligne créée
            }

        }

    }
}

En definitive, l'essentiel du code propre à ce paramétrage se limite à celui qui est dans la méthode addItem.

Le fichier  zip ci-joint contient les sources complètes de cette programmation.



A télécharger : 0000002195.zip (12 Kb - 24/04/2013)