none
afficher les resultats d'une requete par item selectionne dans un listbox dans un autre listbox RRS feed

  • Question

  • Bonjour a tous,

    Voici le contexte :

    J'ai un dataset  : Code.xsd et un tableadapter : CodeTableAdapter .
    Je remplis la table Code par des requetes ajoute a CodeTableAdapter. Mes requetes renvoit une liste de societe ou une liste d'activites ventile par societe ou une liste de code ventile par societe et activite. Les requetes renvoit bien le resultat escompte.
    La table Code contient alors des donnees sur le nom de differentes societes, des types d'activites, des codes. 

    J'ai 3 listbox : CompanyListbox , TypeOfActivityListbox et CodeListbox.

    Ce que je veux faire :

    1. Je souhaite qu'a l'ouverture de la form toutes les societes de la base s'affiche dans CompanyLisbox (Cela fonctionne en bindant la listbox avec la table Code)

    2. L'utilisateur clique sur une societe dans CompanyLisbox, une requete renvoit toutes les activites existantes pour cette societe dans TypeOfActivityListbox.

    3. L'utilisateur clique sur une activite dans TypeOfActivityListbox, une requete renvoit tous les codes disponibles pour cette societe et cette activite dans CodeListbox.

    4. A chaque clic sur un item dans une listbox, l'ensemble se met a jour avec deselection des listbox de "niveau inferieur". (celle dont le contenu depend de celle selectionnee)

    Ou j'en suis :

    Je ne sais pas comment creer des tables "temporaires" pour stocker les resultats des requetes du CodeTableAdapter pour remplir mes listbox dynamiquement.
    Bien sur si je remplis la table Code par mes requetes et que mes listbox y sont tous bindes, le resultat n'est pas celui escompte.

    Merci d'avance de vos conseils eclaires.

    Precision : Je code en VB.

    Cordialement,

    • Modifié PierrotRu jeudi 20 août 2009 09:35
    jeudi 20 août 2009 09:32

Réponses

  • Bonjour DEV-FX,

    Merci de ta reponse.

    Je cherchais plus un conseil sur la methode que le code. Mon code est en VB.NET (je n'ai pas precise car nous sommes dans la section .NET. desole)

    J'ai entre temps trouver une solution qui me satisfait :

    1. J'ai creer une copie de mon tableAdapte : CodeTableAdapter dans mon dataset. Et donc une autre table remplissable.
    2. Je binde dynamiquement une listbox sur chaque table cree par chaque table adapter surl'evenement SelectedIndexChanged.
    3. pour vider mes listbox de contenu : listbox.datasource = Nothing . Elles sont rebinde a chaque evenement SelectedIndexChanged .

    Voici un bout de mon code.

    Public Class ChooseCode
    
        'We force the department for test purpose
        Dim DPT As Integer = 2
    
    
        Private Sub ChooseCode_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            'We force the department for test purpose
            DepartmentLabel.Text = "Outsourcing"
    
            ChooseCodeDataSet.EnforceConstraints = False
    
            CompaniesTableAdapter.FillByCompanyName(ChooseCodeDataSet.Companies)
            CompanyListBox.DisplayMember = "Companies Name"
            CompanyListBox.ValueMember = "Companies ID"
            CompanyListBox.DataSource = ChooseCodeDataSet.Companies
    
            TypeOfActivityListBox.DataSource = Nothing
            AvailableCodesListBox.DataSource = Nothing
    
        End Sub
    
        Private Sub CompanyListBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CompanyListBox.SelectedIndexChanged
    
            CODETableAdapter.FillByActivityPerDepartmentAndCompany(ChooseCodeDataSet.CODE, DPT, CompanyListBox.SelectedValue)
    
            TypeOfActivityListBox.DisplayMember = "Activi"
            TypeOfActivityListBox.ValueMember = "Activity"
            TypeOfActivityListBox.DataSource = ChooseCodeDataSet.CODE
    
            AvailableCodesListBox.DataSource = Nothing
    
        End Sub
    
        Private Sub TypeOfActivityListBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TypeOfActivityListBox.SelectedIndexChanged
    
    
            CODE2TableAdapter.FillByCodeByActivityDepartmentAndCompany(ChooseCodeDataSet.CODE2, TypeOfActivityListBox.SelectedValue, DPT, CompanyListBox.SelectedValue)
    
            AvailableCodesListBox.DisplayMember = "CODE"
            AvailableCodesListBox.ValueMember = "CODE ID"
            AvailableCodesListBox.DataSource = ChooseCodeDataSet.CODE2
    
        End Sub
    End Class
    ps : comme quoi ca aide de poser les choses par ecrit ;^)

    Cordialement,
    • Marqué comme réponse PierrotRu jeudi 20 août 2009 11:18
    jeudi 20 août 2009 11:17

Toutes les réponses

  • Bonjour,

    Une initiative de code de ta part est la bienvenue......Merci aussi de préciser VB6 ou VB .NET.
    Une solution possible que tu peux appliquer :
    Je prends la liste TypeOfActivityListbox :
    Recourir par exemple à une procédure stockée qui a comme paramètre le nom de la société intercepté dans l'évènement CompanyListbox_Click ,
    et remplir la liste TypeOfActivityListbox suivant le résultat et ainsi de suite.

    Merci.
    jeudi 20 août 2009 10:26
  • Bonjour DEV-FX,

    Merci de ta reponse.

    Je cherchais plus un conseil sur la methode que le code. Mon code est en VB.NET (je n'ai pas precise car nous sommes dans la section .NET. desole)

    J'ai entre temps trouver une solution qui me satisfait :

    1. J'ai creer une copie de mon tableAdapte : CodeTableAdapter dans mon dataset. Et donc une autre table remplissable.
    2. Je binde dynamiquement une listbox sur chaque table cree par chaque table adapter surl'evenement SelectedIndexChanged.
    3. pour vider mes listbox de contenu : listbox.datasource = Nothing . Elles sont rebinde a chaque evenement SelectedIndexChanged .

    Voici un bout de mon code.

    Public Class ChooseCode
    
        'We force the department for test purpose
        Dim DPT As Integer = 2
    
    
        Private Sub ChooseCode_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            'We force the department for test purpose
            DepartmentLabel.Text = "Outsourcing"
    
            ChooseCodeDataSet.EnforceConstraints = False
    
            CompaniesTableAdapter.FillByCompanyName(ChooseCodeDataSet.Companies)
            CompanyListBox.DisplayMember = "Companies Name"
            CompanyListBox.ValueMember = "Companies ID"
            CompanyListBox.DataSource = ChooseCodeDataSet.Companies
    
            TypeOfActivityListBox.DataSource = Nothing
            AvailableCodesListBox.DataSource = Nothing
    
        End Sub
    
        Private Sub CompanyListBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CompanyListBox.SelectedIndexChanged
    
            CODETableAdapter.FillByActivityPerDepartmentAndCompany(ChooseCodeDataSet.CODE, DPT, CompanyListBox.SelectedValue)
    
            TypeOfActivityListBox.DisplayMember = "Activi"
            TypeOfActivityListBox.ValueMember = "Activity"
            TypeOfActivityListBox.DataSource = ChooseCodeDataSet.CODE
    
            AvailableCodesListBox.DataSource = Nothing
    
        End Sub
    
        Private Sub TypeOfActivityListBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TypeOfActivityListBox.SelectedIndexChanged
    
    
            CODE2TableAdapter.FillByCodeByActivityDepartmentAndCompany(ChooseCodeDataSet.CODE2, TypeOfActivityListBox.SelectedValue, DPT, CompanyListBox.SelectedValue)
    
            AvailableCodesListBox.DisplayMember = "CODE"
            AvailableCodesListBox.ValueMember = "CODE ID"
            AvailableCodesListBox.DataSource = ChooseCodeDataSet.CODE2
    
        End Sub
    End Class
    ps : comme quoi ca aide de poser les choses par ecrit ;^)

    Cordialement,
    • Marqué comme réponse PierrotRu jeudi 20 août 2009 11:18
    jeudi 20 août 2009 11:17