Een kolom "Nettoprijs" toevoegen in het object ArtFou

0000002022     -      28-12-2024

In het onderstaande voorbeeld ziet u hoe u een kolom kunt toevoegen aan het raster van het tabblad 'Leveranciers' van het artikelfiche. Hoewel de kolom "Nettoprijs" al standaard wordt beheerd, is dit als voorbeeld gebruikt in de customizer. 

Deze implementeert de volgende 2 interfaces:

Het basisprincipe van deze programmering bestaat erin om aan het rooster een kolom toe te voegen die niet gelinkt is aan gegevens. Dat gebeurt via het event AfterColumnsCreated. De cellen van deze kolom zullen ingevuld worden in functie van de behoeften via het event CellFormatting van het rooster. Wij hoeven dan nog enkel het event CellValidated te beheren bij het verlaten van de prijs- en kortingcellen, zodat de nettoprijs voor de actieve lijn wordt herberekend.

De code 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.Linq;
using MercatorExtensions;

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {
        public void FormLoadCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = sigForm.MovableControls.Values.OfType<MercatorUi.Forms.Sig.SigGrids.ArtFou>().FirstOrDefault();
            if (artFou != null)
            {
                artFou.AfterColumnsCreated += Artfou_AfterColumnsCreated;
                artFou.Grid.CellFormatting += Artfou_CellFormatting;
                artFou.Grid.CellValidated += Artfou_CellValidated;
            }
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)form;
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = sigForm.MovableControls.Values.OfType<MercatorUi.Forms.Sig.SigGrids.ArtFou>().FirstOrDefault();
            if (artFou != null)
            {
                artFou.AfterColumnsCreated -= Artfou_AfterColumnsCreated;
                artFou.Grid.CellFormatting -= Artfou_CellFormatting;
                artFou.Grid.CellValidated -= Artfou_CellValidated;
            }
        }

        private void Artfou_AfterColumnsCreated(object sender, EventArgs e) // De kolom "Nettoprijs" toevoegen
        {
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = (MercatorUi.Forms.Sig.SigGrids.ArtFou)sender;
            artFou.Grid.Columns.Add("prix_net", _Divers.Iif_langue(Globals.Langue, "Net Pr.", "Nettoprijs", "Prix net"));
            artFou.Grid.Columns["prix_net"].Width = 85;
            artFou.Grid.Columns["prix_net"].ReadOnly = true;
            artFou.Grid.Columns["prix_net"].DefaultCellStyle.ForeColor = System.Drawing.Color.Gray;
            artFou.Grid.Columns["prix_net"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            // Deze kolom is bewust niet gelinkt aan een DataPropertyName.
            // Ze zal worden berekend via het event CellFormatting van het rooster.
        }

        private void Artfou_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            DataGridView grid = (DataGridView)sender;
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1) && (grid.Columns[e.ColumnIndex].Name == "prix_net") && grid.Columns.Contains("prix") && grid.Columns.Contains("remise") && grid.Columns.Contains("n_dec"))
                refreshPrixNetCell(grid, e.RowIndex, e);
        }

        private void refreshPrixNetCell(DataGridView grid, int rowIndex, DataGridViewCellFormattingEventArgs e)
        {
            double prix = Convert.ToDouble(grid.Rows[rowIndex].Cells["prix"].Value);
            double remise = Convert.ToDouble(grid.Rows[rowIndex].Cells["remise"].Value);
            double remise2 = 0;
            if (grid.Columns.Contains("remise2"))
                remise2 = Convert.ToDouble(grid.Rows[rowIndex].Cells["remise2"].Value);
            double remise3 = 0;
            if (grid.Columns.Contains("remise3"))
                remise3 = Convert.ToDouble(grid.Rows[rowIndex].Cells["remise3"].Value);
            double remise4 = 0;
            if (grid.Columns.Contains("remise4"))
                remise4 = Convert.ToDouble(grid.Rows[rowIndex].Cells["remise4"].Value);
            int n_dec = Convert.ToInt32(grid.Rows[rowIndex].Cells["n_dec"].Value);
            string mask = "# ### ### ##0" + (n_dec > 0 ? "." : "") + Api.Replicate("0", n_dec);
            string prix_net = string.Format("{0:" + mask + "}", Math.Round(prix * ((100 - remise) / 100) * ((100 - remise2) / 100) * ((100 - remise3) / 100) * ((100 - remise4) / 100), 2));
            if (e != null)
                e.Value = prix_net; // Men komt van Artfou_CellFormatting.
            else
                grid.Rows[rowIndex].Cells["prix_net"].Value = prix_net; // Men komt van Artfou_CellValidated.
        }

        private void Artfou_CellValidated(object sender, DataGridViewCellEventArgs e) // Als men de content wijzigt van prijs, korting ... -> moet men de nettoprijs op deze lijn aanpassen.
        {
            DataGridView grid = (DataGridView)sender;
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1) && grid.Columns[e.ColumnIndex].Name.EqualsOr("prix", "remise", "remise2", "remise3", "remise4"))
                refreshPrixNetCell(grid, e.RowIndex, null);
        }
    }
}

Andere module met betrekking tot Artfou: Een kolom schrappen in het object ArtFou



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)