Dans la liste des rayons, ajouter une colonne avec un coefficient

0000002027     -      31/12/2024

 Depuis la version 11.0 de Mercator, l'ajout de la colonne peut être effectué sans code.


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;

// <CompileWithRoslyn />

namespace Param
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.ISqlCommandUpdater
    {
        public void FormLoadCustomize(Form form)
        {
            if (form is MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm) // on est dans l'écran de paramétrage des rayons
            {
                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 form) // modification de la requête de sauvegarde des données
        {
            if (form is MercatorUi.Forms.Param.ParamRayonsForm 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)");
                }
                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
            }
        }
    }
}


Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)