Ceci est une ancienne révision du document !
Les listes liées
Voici un petit tuto pour élaborer un formulaire contenant 2 listes liées
Une première liste déroulante (cbxCat) contient la liste des catégories de produit La deuxième liste déroulante (cbxProduit) contient la liste de produits de la catégorie sélectionnée dans la liste déroulante précédente
La première liste est chargée à partir d'une requête (faite avec l'assistant) au chargement du formulaire (ActionOnLoaded)
function Produit:ActionOnLoaded() self:loadComboboxFromTable("categories","categorie","cbxCat") end
La deuxième liste est chargée lorsque la sélection de la première liste change (ActionOnChange) On récupére la catégorie sélectionnée dans la propriété “text” de la la liste déroulante “cbxCat” On construit la requête en conséquence Puis on charge la liste déroulante
function Produit:cbxCatActionOnChange() local dataset=nsbase.datasetCreate("SQLQuery") local cat=self.setProperty('cbxCat.text') dataset.sql="select distinct produit from produits where categorie='" .. cat .. .. "' order by 1" self.setProperty('cbxProduit.items',dataset.getItems('produit')) end
Voici le code complet :
function Produit:ActionOnLoaded() self:loadComboboxFromTable("categories","categorie","cbxCat") end function Produit:loadComboboxFromTable(tableName,fieldName,combobox) local dataset=nsbase.datasetCreate("SQLQuery") dataset.sql='select distinct ' .. fieldName .. ' from ' .. tableName .. ' order by 1' self.setProperty(combobox .. '.items',dataset.getItems(fieldName)) end function Produit:cbxCatActionOnChange() local dataset=nsbase.datasetCreate("SQLQuery") local cat=self.setProperty('cbxCat.text') dataset.sql="select distinct produit from produits where categorie='" .. cat .. .. "' order by 1" self.setProperty('cbxProduit.items',dataset.getItems('produit')) end