De vervaldatum toevoegen in de klantenhistoriek van het menu "Vensters"

0000001918     -      02-12-2021

Via de hier vermelde parameterinstelling kan de vervaldag worden toegevoegd in de klantenhistoriek van het menu "Vensters". In dit voorbeeld laten we zien hoe u de cellen die overeenkomen met een vervaldag voorafgaand aan de actuele datum vet weergeeft.

Deze pagina ook zien.

Daartoe dient u een customizer HistCli te realiseren die beantwoordt aan 4 interfaces.

Om deze module opnieuw te compileren, volstaat het een project te creëren, genaamd HistCli, dat bestaat uit één enkele klasse Customizer en met als toegevoegde referentie MercatorUi.dll of in de database een HistCli-customizer op te slaan vanaf een tabblad C# in de besteleditor. (deze tweede optie krijgt de voorkeur)

Broncode:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using MercatorApi;
using System.Windows.Forms;
using System.Drawing;

namespace HistCli
{
     public class Customizer : MercatorUi.ICustomizers. IStringUpdater ,
                              MercatorUi.ICustomizers. IFormGridCustomizer ,
                              MercatorUi.ICustomizers. IFormLoadCustomizer ,
                              MercatorUi.ICustomizers. IFormClosedCustomizer
    {
         /*
          * Deze eerste methode is de implementatie van de interface IStringUpdater.
          * Hiermee kunt u rechtstreeks de SQL-opdracht wijzigen die Mercator standaard voorstelt.
          * Aangezien deze opdracht van het volgende type is: select pieds_v.id,journal,piece,reference,type,date,heure,tot_bas_dv,tot_bas_fb,tot_ttc_dv,tot_ttc_fb,n_dec,id_dev,imprime,cubic as flag_appl,niveau_bo,c_nom,devises.nom as dev_nom from pieds_v (NOLOCK),cli (NOLOCK),devises (NOLOCK) where (pieds_v.id_cli=cli.c_id) and (pieds_v.id_dev=devises.id) and (journal='VEN  ')  and (piece>=20060000) and (piece<=20069999) and (date>=cast('01/10/2006' as datetime)) and (date<=cast('31/10/2006' as datetime)) order by piece desc
          * voegt men gewoon toe: vervaldag na datum
          * Het is uiteraard ook mogelijk om complexere wijzigingen aan te brengen, die bijvoorbeeld tabellen toevoegen aan de clausule "from"
          */

         public string StringUpdate( string StringToModify)
        {
             return StringToModify.Replace( "date," , "date,echeance," );
        }

         /*
          * Deze tweede methode is de implementatie van de interface IFormGridCustomizer
          * Ze voegt de kolom "Vervaldag" toe aan de datagridview
          */

         public void FormGridCustomize( Form WindowsForm)
        {
            MercatorUi.Forms.Hist. HistForm HistForm = (MercatorUi.Forms.Hist. HistForm )WindowsForm;
            HistForm.dataGridView.Columns.Add( "echeance" , "Echéance" );
            HistForm.dataGridView.Columns[ "echeance" ].Width = 68;
            HistForm.dataGridView.Columns[ "echeance" ].DataPropertyName = "echeance" ;
            HistForm.dataGridView.Columns[ "echeance" ].DefaultCellStyle.Format = Api .Iif(MercatorUi. Globals .DateMDY, "MM/dd/yyyy" , "dd/MM/yyyy" );    
        }

         /*
          * Deze derde methode is de implementatie van de interface IFormLoadCustomizer.
          * Aangezien deze methode een Form als parameter krijgt (basisvenster, want we kunnen deze interface gebruiken voor diverse schermen),
          * moet er eerst een cast Form -> HistForm worden gerealiseerd.
          * Vervolgens schrijft men een code die zal worden uitgevoerd aan het eind van het event Load van HistForm.
          * Deze code voegt een CellFormatting-event toe aan de dataGridView, waarin men alle vervaldata voorafgaand aan de actuele datum vet weergeeft.
          */

         public void FormLoadCustomize( Form WindowsForm)
        {
            MercatorUi.Forms.Hist. HistForm HistForm = (MercatorUi.Forms.Hist. HistForm )WindowsForm;
            HistForm.dataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler (dataGridView_CellFormatting);
        }

         public void FormClosedCustomize( Form WindowsForm)
        {
            MercatorUi.Forms.Hist. HistForm HistForm = (MercatorUi.Forms.Hist. HistForm )WindowsForm;
            HistForm.dataGridView.CellFormatting -= new DataGridViewCellFormattingEventHandler (dataGridView_CellFormatting);
        }

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

We dienen hier wel op te merken dat het CellFormatting-event wel degelijk in IFormLoadCustomizer moet worden gecreëerd, niet in IFormGridCustomizer. Want dit event zou telkens opnieuw worden toegevoegd wanneer de gebruiker een vernieuwing van de gegevens zou aanvragen. Wat dan ook een negatieve impact zou kunnen hebben op het geheugen en de prestaties van Mercator. Door de creatie van dit event in IFormLoadCustomizer te plaatsen, zijn we zeker dat die slechts eenmaal voorkomt.