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 la liste des rayons, ajouter une colonne avec un coefficient

0000002027     -      30/06/2016

Le module décrit ci-dessous illustre un customizer Param. Ce type de customizer permet d'agir sur les écrans de paramétrage de Mercator. L'objectif de cette programmation est d'ajouter une colonne avec un coefficient dans la table des rayons. Cette programmation nécessite qu'un champ COEFF de type numérique soit ajouté dans la table RAYONS.

Le code implémente les interfaces suivantes :

attention Nous attirons l'attention sur le fait que le code d'un customizer Param s'exécute dans tous les écrans de paramètres. Il est donc essentiel que, dans toutes les méthodes utilisées, on teste si on est bien dans l'écran souhaité, à savoir dans notre exemple, l'écran des rayons.

Le code s'établit comme suit :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;


namespace Param
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.ISqlCommandUpdater
    {

        public void FormLoadCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // on est dans l'écran de paramétrage des rayons
            {
                MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
                MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn colCoeff = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
                colCoeff.Name = "colCoeff";
                colCoeff.HeaderText = "Coeff.";
                colCoeff.Width = 80;
                colCoeff.DataPropertyName = "coeff";
                colCoeff.DisplayFormat = "##0.00";
                colCoeff.MinValue = 0;
                colCoeff.MaxValue = 999.99;
                colCoeff.SortMode = DataGridViewColumnSortMode.NotSortable;
                colCoeff.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                paramRayonsForm.Grid.Columns.Add(colCoeff);
            }
        }

        public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, Form WindowsForm) // modification de la requête de sauvegarde des données
        {
            if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // on est bien dans l'écran de paramétrage des rayons
            {
                if (!SqlCommandToModify.CommandText.Contains("coeff")) // cette modification ne doit être effectuée qu'une seule fois. Ensuite la requête modifiée est utilisée pour toutes les lignes de la grille ajoutées ou modifiées
                {
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva=@taux_tva", ",coeff=@coeff,taux_tva=@taux_tva");
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva)", ",coeff,taux_tva)");
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",@taux_tva)", ",@coeff,@taux_tva)");
                }
                MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
                string id = SqlCommandToModify.Parameters["@id"].Value.ToString(); // il nous faut connaître l'ID de la ligne afin de retrouver le coefficient correspondant à cette ligne
                DataTable dt = (DataTable)paramRayonsForm.Grid.DataSource; // derrière la grille, se trouve en fait une DataTable
                DataRow[] foundRows = dt.Select(string.Format("id='{0}'", Api.UnquoteSql(id))); // recherche du coefficient sur base de l'ID.
                if (foundRows.Length > 0) // en principe, cette condition sera toujours remplie
                    SqlCommandToModify.Parameters.AddWithValue("@coeff", foundRows[0]["coeff"]); // on ajoute le paramètre SQL @coeff avec la bonne valeur
            }
        }

    }
}