In een SigGrid een spinner toevoegen waarvan de waarde opgenomen is in de SQL-query van de grid

0000002396     -      05-12-2016

Het doel van dit programma is om te laten zien hoe u een gepersonaliseerde SigGrid verrijkt met een spinner, waarvan de genomen waarde in de SQL query gevoed wordt in dezelfde grid. In ons voorbeeld, zal de grid de maandelijkse omzet weergeven en de spinner geeft de mogelijkheid om het jaar te kiezen. Deze instelling is van toepassing op de leverancier fiche.

De SQL-query van de grid is:

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)

Vooraleer de grid een header heeft waarin we de spinner zullen plaatsen, hoort u een titel voor de grid in te geven in het TextF bestand.

De ID van deze grid wordt genoteerd en deze waarde wordt gebruikt in de C# code op de 841DDAADD9 plaats.

De customizer zal deze interfaces implementeren:

Op de gepersonaliseerde grid (UserDefinedGrid) zal de customizer de volgende events gebruiken:

  • HeaderCreated: bij het maken van de header voegt u de spinner toe
  • BeforeFillWithData: voeg de @year parameter toe die de waarde van de spinner bevat, voor u de SQL-query van de grid uitvoert

De code van de customizer is als volgt:

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);
            }
        }

        // Voeg de spinner toe aan de header (opdat de header geen null is, voegen we een titel toe aan de grid eigenschappen)
        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);
        }

        // Wanneer we de waarde van de spinner veranderen forceren we een refresh van de grid
        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();
        }

        // De waarde van de spinner doorgeven als extra SQL-parameter
        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));
        }
    }
}