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.
alter table STOCK add S_USAGES vharchar(MAX) not null default ''
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).
alter table LIGNES_V add USAGE char(200) not null default ''
De onderstaande customizer toont de code die in een Billing customizer moet worden geplaatst. Het principe is dat de lijst op kolomniveau alle mogelijke items moet bevatten. Aan de andere kant, via de EditingControlShowing event van het raster, wanneer de vervolgkeuzelijst daadwerkelijk wordt weergegeven als een bewerkingsbesturingselement, geven we een lijst met elementen weer die specifiek zijn voor het huidige artikel.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using System.ComponentModel;
using System.Linq;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BillingFormLoaded += BillingEngine_BillingFormLoaded;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BillingFormLoaded -= 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 != "") && !l.Any(p => p.Id == usage))
l.Add(new MercatorUi._BaseClasses.MercatorComboItem(usage, usage));
}
DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn comboCol = new DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn();
comboCol.Name = "usage";
comboCol.HeaderText = "Gebruik";
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 += Grid_EditingControlShowing;
billingEngine.BillingForm.LinesEditor.Grid.Disposed += Grid_Disposed;
}
}
private void Grid_Disposed(object sender, EventArgs e)
{
MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
grid.EditingControlShowing -= Grid_EditingControlShowing;
grid.Disposed -= Grid_Disposed;
}
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 != "")
{
MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)grid.FindForm();
foreach (string s in billingForm.BillingEngine.StockRecords[id_article].S_USAGES.Split(new char[2] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
{
l.Add(new MercatorUi._BaseClasses.MercatorComboItem(s, s));
if (!listOnCol.Any(p => p.Id == s))
listOnCol.Add(new MercatorUi._BaseClasses.MercatorComboItem(s, s));
}
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", "")); // een leeg element in de combo toevoegen
}
combo.DataSource = l;
}
}
}
}