Ceci peut se faire assez simplement puisque Mercator dispose de cette fonctionnalité pour lui même (pour les rayons / familles / sous-familles, pour les gammes).
Il faut ajouter ces champs dans la table STOCK :
alter table STOCK add
S_ID_RAY2 char(10) not null default '',
S_ID_FAM2 char(10) not null default ''
Il faut ajouter un combo en mode paramétrage associé à ces deux champs et respectivement avec ces 2 requêtes SQL :
- select nom,id from rayons order by nom
- select nom,id from familles where id_rayon=@id order by nom
Il faut alimenter la propriété ParentField du combo associé à S_ID_FAM2 avec la valeur S_ID_RAY2 pour lier les 2 combos. La SelectedValue du combo rayon sera passée en tant que @id à la requête SQL. Ce changement de propriété se fait par ce simple customizer :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace SigStock
{
public class Customizer : MercatorUi.ICustomizers.IComboListPreCustomizer
{
public void ComboListPreCustomize(MercatorUi.MovableControls.Interfaces.IMovableComboBoxOrTree combo)
{
if (combo.Source == "S_ID_FAM2")
combo.ParentField = "S_ID_RAY2";
}
}
}
Il ne faut rien faire d'autre. Mercator se charge du reste.
Depuis la version 10.6.106 de MercatorUi.dll, ceci est possible dans tous les écrans personnalisables.
Comment est-il possible de placer des comboboxes interdépendants dans un signalétique ? Par exemple pouvoir disposer d'un deuxième jeux "rayons - familles". Ceci associé aux champs S_ID_RAY2 et S_ID_FAM2 de la ta table STOCK.
Voir aussi : Gestion des rayons / familles / sous-familles supplémentaires