Voici un petit tuto pour élaborer un fomulaire 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

NEUTS Jean-Luc

Écrire un commentaire

Quelle est la deuxième lettre du mot lzjz ?

Fil RSS des commentaires de cet article