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