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

Ajout de la date d'échéance dans l'historique client du menu "Fenêtres" avec test sur le journal

0000003056     -      17/12/2021

Le paramétrage présenté ici permet d'ajouter la date d'échéance dans l''historique client du menu "Fenêtres", uniquement si la séquence est VEN. Pour l'exemple, nous montrerons comment mettre en gras les cellules correspondant à une date d'échéance antérieure à la date du jour.

Cela se fait par réalisation d'un customizer HistCli qui répond à une seule interface : IGridUnifiedCustomizer.

Le code contient 3 parties, qui sont cependant "unifiées" via l'objet GridUnifiedCustomizerContainer :

  • StringUpdater : qui permet de modifier la requête SQL. Ce code est toujours appelé en premier et sera utilisé pour mettre en place les parties ci-dessous.
  • GridUpdater : qui agit au même moment que FormGridCustomize.
  • PrefuserKeyCompl : qui permet de spécifier un complément de chaîne de caractères pour la clé permettant de sauvegarder l'ordre et la largeur des colonnes
  • Dispose : qui est exécuté une seule fois lorsque la grille en question est elle-même disposée.

Cette programmation est compatible avec le menu contextuel "Chercher à nouveau" de la grille.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using System.Drawing;
using MercatorUi.GridPro;


// <CompileWithRoslyn />

namespace HistCli
{
    public class Customizer : MercatorUi.ICustomizers.IGridUnifiedCustomizer
    {
        public void GridUnifiedCustomize(GridUnifiedCustomizerContainer gridUnifiedCustomizerContainer)
        {
            gridUnifiedCustomizerContainer.StringUpdater = (reqSql) =>
            {
                string journal = Api.StrExtract(reqSql, "pieds_v.journal='", "'").TrimEnd();
                if (journal == "VEN")
                    reqSql = reqSql.Replace("date,", "date,echeance,");

                gridUnifiedCustomizerContainer.GridUpdater = () =>
                {
                    if ((journal == "VEN") && !gridUnifiedCustomizerContainer.Grid.Columns.Contains("echeance"))
                    {
                        gridUnifiedCustomizerContainer.Grid.Columns.Add("echeance", "Echéance");
                        gridUnifiedCustomizerContainer.Grid.Columns["echeance"].Width = 85;
                        gridUnifiedCustomizerContainer.Grid.Columns["echeance"].DataPropertyName = "echeance";
                        gridUnifiedCustomizerContainer.Grid.Columns["echeance"].DefaultCellStyle.Format = Api.Iif(MercatorUi.Globals.DateMDY, "MM/dd/yyyy", "dd/MM/yyyy");
                        gridUnifiedCustomizerContainer.Grid.CellFormatting += Grid_CellFormatting;
                    }
                    else if ((journal != "VEN") && gridUnifiedCustomizerContainer.Grid.Columns.Contains("echeance"))
                    {
                        gridUnifiedCustomizerContainer.Grid.CellFormatting -= Grid_CellFormatting;
                        gridUnifiedCustomizerContainer.Grid.Columns.Remove("echeance");
                    }
                };

                gridUnifiedCustomizerContainer.PrefuserKeyCompl = journal == "VEN" ? journal : "";

                gridUnifiedCustomizerContainer.Dispose = () =>
                {
                    gridUnifiedCustomizerContainer.Grid.CellFormatting -= Grid_CellFormatting;
                };
                
                return reqSql;
            };
        }

        void Grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            DataGridView grid = (DataGridView)sender;
            if ((grid.Columns[e.ColumnIndex].Name == "echeance") && (grid.Rows[e.RowIndex].Cells["echeance"].Value != DBNull.Value))
            {
                if (Convert.ToDateTime(e.Value) < DateTime.Now)
                    e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold);
            }
        }
    }
}