Cette programmation permet d'ajouter un déroulant dans la boîte de dialogue de l'historique clients du menu "Fenêtres". Dans notre exemple, ce déroulant permettra de filtrer sur le statut de centralisation en comptabilité. Dans un second temps, lors de l'exécution de la requête sélectionnant les documents à afficher, ce paramètre sera bien entendu pris en compte. Ce développement est basé sur un customizer HistCli qui implémente ces interfaces :
Notons au passage que ce code illustre l'utilisation de la classe MercatorUi._BaseClasses.MercatorComboItem pour alimenter les items d'un déroulant.
Le code situé sous "// on ajoute le déroulant dans la boîte de dialogue" est simplement une retranscription du code généré automatiquement par le designer, lorsqu'un objet MercatorUi._BaseClasses.ComboBoxExReadOnly est déposé sur une form.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
namespace HistCli
{
public class Customizer : MercatorUi.ICustomizers.IDialogLoadCustomizer, MercatorUi.ICustomizers.IStringUpdater
{
private MercatorUi._BaseClasses.ComboBoxExReadOnly comboBoxCentralisation;
public void DialogLoadCustomize(System.Windows.Forms.Form form)
{
// cette liste correspond aux éléments du déroulant qui va être ajouté dans la boîte de dialogue
List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Tous", (Int16)0));
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Non centralisés", (Int16)1));
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("En erreur", (Int16)2));
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Figés", (Int16)3));
l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Centralisés", (Int16)4));
// on ajoute le déroulant dans la boîte de dialogue
comboBoxCentralisation = new MercatorUi._BaseClasses.ComboBoxExReadOnly();
comboBoxCentralisation.DisplayMember = "Text";
comboBoxCentralisation.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
comboBoxCentralisation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
comboBoxCentralisation.FormattingEnabled = true;
comboBoxCentralisation.ItemHeight = 14;
comboBoxCentralisation.Location = new System.Drawing.Point(355, 210);
comboBoxCentralisation.Name = "comboBoxDepot";
comboBoxCentralisation.Size = new System.Drawing.Size(122, 20);
comboBoxCentralisation.BringToFront();
comboBoxCentralisation.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
comboBoxCentralisation.DisplayMember = "Description";
comboBoxCentralisation.ValueMember = "N";
comboBoxCentralisation.DataSource = l;
comboBoxCentralisation.SelectedValue = (Int16)0;
form.Controls.Add(comboBoxCentralisation);
form.Disposed += form_disposed;
}
public string StringUpdate(string StringToModify)
{
if (comboBoxCentralisation == null)
return StringToModify; // on est arrivé dans l'historique sans passer par la boîte de dialogue (par exemple, depuis un regroupement automatique)
string compl_where = null;
int selectedValueInCombo = System.Convert.ToInt32(comboBoxCentralisation.SelectedValue);
if (selectedValueInCombo == 1) // Non centralisés
compl_where = "(cubic=0)";
else if (selectedValueInCombo == 2) // En erreur
compl_where = "((cubic>0) and (cubic<8))";
else if (selectedValueInCombo == 3) // Figés
compl_where = "(cubic=8)";
else if (selectedValueInCombo == 4) // Centralisés
compl_where = "(cubic=9)";
if (compl_where == null)
return StringToModify;
else
return StringToModify.Replace(" order by ", " and " + compl_where + " order by "); // on ajoute la nouvelle condition juste avant order by
}
private void form_disposed(object sender, EventArgs e)
{
System.Windows.Forms.Form form = (System.Windows.Forms.Form)sender;
form.Disposed -= form_disposed;
comboBoxCentralisation = null;
}
}
}