U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

In een verkoopinvoerrooster een dropdownmenu (combobox) toevoegen met waarden afkomstig uit de artikelfiche

0000002605     -      23-10-2015

Met deze customizer kan men in een verkoopinvoerrooster een dropdownmenu (combobox) toevoegen waarvan de waarden afkomstig zijn uit de artikelfiche. Op die manier krijgt men een dropdownmenu waarvoor de beschikbare waarden wijzigen naargelang van het artikel.

De beschikbare waarden worden opgeslagen in een veld S_USAGES varchar(MAX) van de tabel STOCK.

Die beschikbare waarden worden in dit memoveld van de artikelfiche ingevoerd. Ze worden van elkaar gescheiden met behulp van een harde return (elke regel = een beschikbare optie).

In de tabel LIGNES_V moet men het veld USAGE char(200) toevoegen (de lengte kan variëren, maar ze moet minstens gelijk zijn aan de lengte van de langste optie die ingevoerd zal worden).

Le customizer repris ci-dessous montre le code à mettre en place dans un customizer Billing. Le principe est que la liste au niveau de la colonne doit contenir tous les items possibles. Par contre, via l'évènement EditingControlShowing de la grille, lorsque le déroulant est réellement affiché en tant que contrôle d'édition, on affiche une liste d'éléments propres à l'article en cours.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using System.ComponentModel;


namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded += new EventHandler(BillingEngine_BillingFormLoaded);
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded -= new EventHandler(BillingEngine_BillingFormLoaded);
        }

        void BillingEngine_BillingFormLoaded(object sender, EventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (billingEngine.BillingForm.LinesEditor != null)
            {
                BindingList<MercatorUi._BaseClasses.MercatorComboItem> l = new BindingList<MercatorUi._BaseClasses.MercatorComboItem>();
                foreach(DataRow dr in billingEngine.LIGNES.Rows)
                {
                    string usage = dr["usage"].ToString();
                    if ((usage != "") && !itemExistsInList(l, usage))
                        l.Add(new MercatorUi._BaseClasses.MercatorComboItem(usage, usage));
                }
                DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn comboCol = new DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn();
                comboCol.Name = "usage";
                comboCol.HeaderText = "Usage";
                comboCol.DataPropertyName = "usage";
                comboCol.DisplayMember = "Description";
                comboCol.ValueMember = "Id";
                comboCol.DataSource = l;
                comboCol.Width = 100;
                comboCol.DropDownStyle = ComboBoxStyle.DropDownList;
                billingEngine.BillingForm.LinesEditor.Grid.Columns.Add(comboCol);
                billingEngine.BillingForm.LinesEditor.Grid.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(Grid_EditingControlShowing);
            }
        }

        void Grid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.Control is DevComponents.DotNetBar.Controls.ComboBoxEx) && (grid.Columns[grid.CurrentCell.ColumnIndex].Name == "usage"))
            {
                DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn comboCol = (DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn)grid.Columns[grid.CurrentCell.ColumnIndex];
                BindingList<MercatorUi._BaseClasses.MercatorComboItem> listOnCol = (BindingList<MercatorUi._BaseClasses.MercatorComboItem>)comboCol.DataSource;
                
                
                DevComponents.DotNetBar.Controls.ComboBoxEx combo = (DevComponents.DotNetBar.Controls.ComboBoxEx)e.Control;
                string id_article = grid.CurrentRow.Cells["id_article"].Value.ToString();
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
                if (id_article != "")
                {
                    string s_usages = MercatorController.xFunctions.xLookUpString("STOCK", "S_ID", id_article, "S_USAGES");
                    foreach (string s in s_usages.Split(new char[2] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        l.Add(new MercatorUi._BaseClasses.MercatorComboItem(s, s));
                        if (!itemExistsInList(listOnCol, s))
                            listOnCol.Add(new MercatorUi._BaseClasses.MercatorComboItem(s, s));
                    }
                    l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", "")); // ajouter un élément vide dans le combo
                }
                combo.DataSource = l;
            }
        }

        private bool itemExistsInList(BindingList<MercatorUi._BaseClasses.MercatorComboItem> l, string s)
        {
            foreach (MercatorUi._BaseClasses.MercatorComboItem item in l)
            {
                if (item.Id == s)
                    return true;
            }
            return false;
        }
    }
}