Een wijzigbare kolom toevoegen in het Dispo-rooster

0000002075     -      31-12-2024

 Sinds versie 11.0 van Mercator is deze code verouderd. Zie: Hoe het bewerken van extra kolommen in een rooster toestaan zonder te programmeren?


De onderstaande voorbeeldcode laat zien hoe een wijzigbare kolom wordt toegevoegd in het beschikbaarheidsrooster. Met deze kolom uit het voorbeeld kan een lokalisatie worden beheerd op het niveau van de magazijnen van de verschillende winkels.

De hier geïllustreerde programmering wordt gerealiseerd op basis van een SigStock-customizer die de volgende interfaces implementeert:

De code van deze customizer ziet er als volgt uit:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Linq;

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer
                            , MercatorUi.ICustomizers.IFormClosedCustomizer
                            , MercatorUi.ICustomizers.IStringUpdater
    {
        public string StringUpdate(string stringToModify) // Wijziging van de opdracht van het beschikbaarheidsrooster om rekening te houden met een nieuwe kolom.
        {
            if (Api.StrExtract(stringToModify, "<ID>", "</ID>") == "STOCKDISPO") // Dit laat toe enkel de opdracht van het beschikbaarheidsrooster te wijzigen, en niet de opdrachten van de andere roosters van het informatiebestand "Artikels"
            {
                stringToModify = stringToModify.Replace("dispo.stockmax,", "dispo.stockmax,dispo.loc,dispo.loc as loc_old,")
                                               .Replace("sum(stockmax),", "sum(stockmax),'','',");
            }
            return stringToModify;
        }

        public void FormLoadCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = sigForm.MovableControls.Values.OfType<MercatorUi.Forms.Sig.SigGrids.StockDispo>().FirstOrDefault();
            if (stockDispo != null)
            {
                stockDispo.AfterColumnsCreated += StockDispo_AfterColumnsCreated;
                stockDispo.AfterWrite += StockDispo_AfterWrite;
            }
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = sigForm.MovableControls.Values.OfType<MercatorUi.Forms.Sig.SigGrids.StockDispo>().FirstOrDefault();
            if (stockDispo != null)
            {
                stockDispo.AfterColumnsCreated -= StockDispo_AfterColumnsCreated;
                stockDispo.AfterWrite -= StockDispo_AfterWrite;
            }
        }

        private void StockDispo_AfterColumnsCreated(object sender, EventArgs e) // De kolom "Lokalisatie" toevoegen
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
            stockDispo.Grid.Columns.Add("loc", _Divers.Iif_langue(Globals.Langue, "Localisation", "Lokalisatie", "Localisation"));
            stockDispo.Grid.Columns["loc"].Width = 85;
            stockDispo.Grid.Columns["loc"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            stockDispo.Grid.Columns["loc"].DataPropertyName = "loc";
            stockDispo.Grid.AddInvisibleColumn("loc_old");
        }

        private void StockDispo_AfterWrite(object sender, EventArgs e) // Om de wijzigingen aan de nieuwe kolom in de DB in te voeren
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)stockDispo.Form;
            if (stockDispo.LastIdFilled == sigForm.DataSourceRow["s_id"].ToString())
            {
                using (SqlCommand cmd = new SqlCommand("update dispo set loc = @loc where id_stock = @id_stock and id_magasin = @id_magasin"))
                {
                    foreach (DataGridViewRow row in stockDispo.Grid.Rows)
                    {
                        if (row.Cells["loc"].Value.ToString().TrimEnd() != row.Cells["loc_old"].Value.ToString().TrimEnd())
                        {
                            cmd.Parameters.Clear();
                            cmd.Parameters.Add(new SqlParameter("@id_stock", SqlDbType.Char)).Value = sigForm.DataSourceRow["s_id"].ToString();
                            cmd.Parameters.Add(new SqlParameter("@id_magasin", SqlDbType.Char)).Value = row.Cells["id"].Value;
                            cmd.Parameters.Add(new SqlParameter("@loc", SqlDbType.Char)).Value = row.Cells["loc"].Value;
                            Api.SqlExec(Globals.RepData, cmd);
                        }
                    }
                }
            }
        }
    }
}


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)