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 une grille de signalétique, ajouter un spinner dont la valeur est prise en compte dans la requête SQL de la grille

0000002396     -      05/12/2016

L'objet de cette programmation est de montrer comment enrichir une grille personnalisée de signalétique avec un spinner, dont la valeur est prise en compte dans la requête SQL qui alimente cette même grille. Dans notre exemple, la grille va afficher un chiffre d'affaires mensuel et le spinner permettra de choisir l'année. Ce paramétrage s'applique à la fiche fournisseur.

La requête SQL de la grille est :

declare @debut datetime , @fin datetime
set @debut='01/01/'+ltrim(str(@year))
set @fin='01/01/'+ltrim(str(@year+1)) -- utiliser 1/1 pour éviter les problèmes de date MDY
 
select isnull(sum(case when month(date)=1 then tot_bas_fb else 0 end),0) as Janvier,
    isnull(sum(case when month(date)=2 then tot_bas_fb else 0 end),0) as Fevrier,
    isnull(sum(case when month(date)=3 then tot_bas_fb else 0 end),0) as Mars,
    isnull(sum(case when month(date)=4 then tot_bas_fb else 0 end),0) as Avril,
    isnull(sum(case when month(date)=5 then tot_bas_fb else 0 end),0) as Mai,
    isnull(sum(case when month(date)=6 then tot_bas_fb else 0 end),0) as Juin,
    isnull(sum(case when month(date)=7 then tot_bas_fb else 0 end),0) as Juillet,
    isnull(sum(case when month(date)=8 then tot_bas_fb else 0 end),0) as Aout,
    isnull(sum(case when month(date)=9 then tot_bas_fb else 0 end),0) as Septembre,
    isnull(sum(case when month(date)=10 then tot_bas_fb else 0 end),0) as Octobre,
    isnull(sum(case when month(date)=11 then tot_bas_fb else 0 end),0) as Novembre,
    isnull(sum(case when month(date)=12 then tot_bas_fb else 0 end),0) as Decembre,
    isnull(sum(tot_bas_fb),0) as Total
from pieds_a where (id_fou=@f_id) and (date>=@debut) and (date<@fin) and (type=1)

Afin que cette grille dispose d'un header dans lequel nous allons placer le spinner, il faut indiquer un titre pour cette grille dans sa propriété TextF.

L'ID de cette grille doit être noté et cette valeur doit être utilisée dans le code C# à la place de 841DDAADD9.

Le customizer va implémenter ces interfaces :

Sur la grille personnalisée (UserDefinedGrid), le customizer va utiliser ces évènements :

  • HeaderCreated : lors de la création du header, ajouter le spinner
  • BeforeFillWithData : avant l'exécution de la requête SQL de la grille, ajouter le paramètre @year contenant la valeur du spinner

Le code de ce customizer est le suivant :

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

namespace SigFou
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            if (sigForm.MovableControls.ContainsKey("841DDAADD9"))
            {
                MercatorUi.Forms.Sig.SigGrids.UserDefined userDefinedGrid = (MercatorUi.Forms.Sig.SigGrids.UserDefined)sigForm.MovableControls["841DDAADD9"];
                userDefinedGrid.HeaderCreated += new MercatorUi.MovableControls.MovableGrid.HeaderCreatedHandler(userDefinedGrid_HeaderCreated);
                userDefinedGrid.BeforeFillWithData += new MercatorUi.Forms.Sig.SigGrids.UserDefined.BeforeFillWithDataEventHandler(userDefinedGrid_BeforeFillWithData);
            }
        }

        public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            if (sigForm.MovableControls.ContainsKey("841DDAADD9"))
            {
                MercatorUi.Forms.Sig.SigGrids.UserDefined userDefinedGrid = (MercatorUi.Forms.Sig.SigGrids.UserDefined)sigForm.MovableControls["841DDAADD9"];
                userDefinedGrid.HeaderCreated -= new MercatorUi.MovableControls.MovableGrid.HeaderCreatedHandler(userDefinedGrid_HeaderCreated);
                userDefinedGrid.BeforeFillWithData -= new MercatorUi.Forms.Sig.SigGrids.UserDefined.BeforeFillWithDataEventHandler(userDefinedGrid_BeforeFillWithData);
            }
        }

        // ajouter le spinner dans le header (pour que le header soit non null, il faut mettre un titre dans les propriétés de la grille)
        void userDefinedGrid_HeaderCreated(object sender, MercatorUi.MovableControls.MovableGrid.HeaderCreatedEventArgs e)
        {
            MercatorUi.Forms.Sig.SigGrids.UserDefined userDefinedGrid = (MercatorUi.Forms.Sig.SigGrids.UserDefined)sender;

            MercatorUi._BaseClasses.BindableIntegerInput spinnerYear = new MercatorUi._BaseClasses.BindableIntegerInput();
            spinnerYear.BackgroundStyle.Class = "DateTimeInputBackground";
            spinnerYear.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
            spinnerYear.Increment = 1;
            spinnerYear.Size = new System.Drawing.Size(51, 20);
            spinnerYear.Location = new System.Drawing.Point(userDefinedGrid.Header.Width - 15 - spinnerYear.Width, 10);
            spinnerYear.Anchor = System.Windows.Forms.AnchorStyles.Right;
            spinnerYear.MaxValue = 2099;
            spinnerYear.MinValue = 2014;
            spinnerYear.ShowUpDown = true;
            spinnerYear.Value = DateTime.Now.Year;
            spinnerYear.Name = "spinnerYear";
            spinnerYear.ValueChanged += new EventHandler(spinnerYear_ValueChanged);
            userDefinedGrid.Header.Controls.Add(spinnerYear);
        }

        // quand on change la valeur du spinner, forcer le refresh de la grille
        void spinnerYear_ValueChanged(object sender, EventArgs e)
        {
            MercatorUi._BaseClasses.BindableIntegerInput spinnerYear = (MercatorUi._BaseClasses.BindableIntegerInput)sender;
            MercatorUi.Forms.Sig.SigGrids.UserDefined userDefinedGrid = (MercatorUi.Forms.Sig.SigGrids.UserDefined)spinnerYear.Parent.Parent;
            userDefinedGrid.FillWithData();
        }

        // passer la valeur du spinner en tant que paramètre SQL supplémentaire
        void userDefinedGrid_BeforeFillWithData(object sender, MercatorUi.Forms.Sig.SigGrids.UserDefined.BeforeFillWithDataEventArgs e)
        {
            MercatorUi.Forms.Sig.SigGrids.UserDefined userDefinedGrid = (MercatorUi.Forms.Sig.SigGrids.UserDefined)sender;
            MercatorUi._BaseClasses.BindableIntegerInput spinnerYear = (MercatorUi._BaseClasses.BindableIntegerInput)userDefinedGrid.Header.Controls["spinnerYear"];
            e.ListSqlParams.Add(new MercatorSqlParam("@year", spinnerYear.Value));
        }
    }
}