IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

ListBox et CheckedListBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 60
    Par défaut ListBox et CheckedListBox
    Salut à tous

    J'aimerais savoir comment ajouter des données à une table de base données SQL SERVER 2008 en VB.NET depuis une ListBox et une CheckedListBox en testant en premier lieu les ITEMS séléctionnées s'ils existent déjà ou pas dans la base de données et sachant aussi qu'on a droit à une et une seule sélection dans la ListBox et à 3 ou 4 sélections dans la CheckedListBox .

    La table contient deux champs seulement :
    DivProfs ( #idcla , #idprof ) et sont de type Integer

    J'ai fait ce code pour le remplissage de la ListBox et de la CheckedListBox dans une procédure puis l'appeller dans le Load event de la feuille :

    Private Sub FillListBox()

    cn.ConnectionString = strcon

    Dim strProfs As String = "select idprof,nomp + ' ' + prenp as professor from profs"
    Dim daProfs As New SqlDataAdapter(strProfs, cn)
    Dim dtProfs As New DataTable("profs")

    If cn.State Then cn.Close()

    cn.Open()
    daProfs.Fill(dtProfs)
    cn.Close()

    For Each dr As DataRow In dtProfs.Rows
    lstProfs.Items.Add(dr("professor").ToString)
    Next

    lstProfs.DisplayMember = "professor"
    lstProfs.ValueMember = "idprof"

    Dim strDivs As String = "select idcla,libcla from divisions"
    Dim daDivs As New SqlDataAdapter(strDivs, cn)
    Dim dtDivs As New DataTable("divisions")

    If cn.State Then cn.Close()

    cn.Open()
    daDivs.Fill(dtDivs)
    cn.Close()

    For Each r As DataRow In dtDivs.Rows
    chkListDivs.Items.Add(r("libcla").ToString)
    Next

    chkListDivs.DisplayMember = "libcla"
    chkListDivs.ValueMember = "idcla"

    End Sub
    Private Sub frmProfsDivisions_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    chkListDivs.CheckOnClick = True

    FillListBox()
    End SubVoici le code pour l'ajout dans la base de données :

    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

    Dim cmdAddProfDiv As New SqlCommand
    cmdAddProfDiv.Connection = cn
    cmdAddProfDiv.CommandText = "insert into divprofs (idcla,idprof) values (@idcla,@idprof)"

    cmdAddProfDiv.Parameters.Clear()

    Dim pr_idcla As New SqlParameter("@idcla", SqlDbType.Int, 4)
    cmdAddProfDiv.Parameters.Add(pr_idcla)

    Dim pr_idprof As New SqlParameter("@idprof", SqlDbType.Int, 4)
    cmdAddProfDiv.Parameters.Add(pr_idprof)

    Dim strCheck As String = "select * from divprofs "

    Dim daProfDiv As New SqlDataAdapter(strCheck, cn)
    Dim dsProfDiv As New DataSet
    Dim dtProfDiv As New DataTable("divprofs")

    If cn.State Then cn.Close()

    cn.Open()
    dtProfDiv.Clear()
    daProfDiv.Fill(dtProfDiv)
    cn.Close()

    cn.Open()

    Dim drow As DataRow

    For Each itemProf In lstProfs.SelectedIndices

    For Each indexChecked In chkListDivs.CheckedIndices

    For Each drow In dtProfDiv.Rows

    If drow("idcla") = (indexChecked + 1) And drow("idprof") = (itemProf + 1) Then

    MsgBox("Données existantes,Veuillez réessayez ! ", MsgBoxStyle.Exclamation )

    Exit For

    End If

    Next

    cmdAddProfDiv.Parameters("@idcla").Value = indexChecked + 1
    cmdAddProfDiv.Parameters("@idprof").Value = itemProf + 1
    cmdAddProfDiv.ExecuteNonQuery()

    Next

    Next

    MsgBox("Ajout avec Succès !", MsgBoxStyle.Information )

    cn.Close()
    cmdAddProfDiv.Dispose()

    End SubMerci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Merci de bien vouloir lire les Règles du Forum.



    Ton code est long et sans aucune mise en forme (pas d'indentation, ni de balise code) => ça ne donne pas envie de lire.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 60
    Par défaut
    Salut à tous

    J'aimerais savoir comment ajouter des données à une table de base données SQL SERVER 2008 en VB.NET depuis une ListBox et une CheckedListBox en testant en premier lieu les ITEMS séléctionnées s'ils existent déjà ou pas dans la base de données et sachant aussi qu'on a droit à une et une seule sélection dans la ListBox et à 3 ou 4 sélections dans la CheckedListBox .

    La table contient deux champs seulement :
    DivProfs ( #idcla , #idprof ) et sont de type Integer

    J'ai fait ce code pour le remplissage de la ListBox et de la CheckedListBox dans une procédure puis l'appeller dans le Load event de la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub FillListBox()
     
    cn.ConnectionString = strcon
     
    Dim strProfs As String = "select idprof,nomp + ' ' + prenp as professor from profs"
    Dim daProfs As New SqlDataAdapter(strProfs, cn)
    Dim dtProfs As New DataTable("profs")
     
    If cn.State Then cn.Close()
     
    cn.Open()
    daProfs.Fill(dtProfs)
    cn.Close()
     
    For Each dr As DataRow In dtProfs.Rows
    lstProfs.Items.Add(dr("professor").ToString)
    Next
     
    lstProfs.DisplayMember = "professor"
    lstProfs.ValueMember = "idprof"
     
    Dim strDivs As String = "select idcla,libcla from divisions"
    Dim daDivs As New SqlDataAdapter(strDivs, cn)
    Dim dtDivs As New DataTable("divisions")
     
    If cn.State Then cn.Close()
     
    cn.Open()
    daDivs.Fill(dtDivs)
    cn.Close()
     
    For Each r As DataRow In dtDivs.Rows
    chkListDivs.Items.Add(r("libcla").ToString)
    Next
     
    chkListDivs.DisplayMember = "libcla"
    chkListDivs.ValueMember = "idcla"
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub frmProfsDivisions_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
    chkListDivs.CheckOnClick = True
     
    FillListBox()
     
    End Sub
    Voici le code pour l'ajout dans la base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
     
    Dim cmdAddProfDiv As New SqlCommand
    cmdAddProfDiv.Connection = cn
    cmdAddProfDiv.CommandText = "insert into divprofs (idcla,idprof) values (@idcla,@idprof)"
     
    cmdAddProfDiv.Parameters.Clear()
     
    Dim pr_idcla As New SqlParameter("@idcla", SqlDbType.Int, 4)
    cmdAddProfDiv.Parameters.Add(pr_idcla)
     
    Dim pr_idprof As New SqlParameter("@idprof", SqlDbType.Int, 4)
    cmdAddProfDiv.Parameters.Add(pr_idprof)
     
    Dim strCheck As String = "select * from divprofs "
     
    Dim daProfDiv As New SqlDataAdapter(strCheck, cn)
    Dim dsProfDiv As New DataSet
    Dim dtProfDiv As New DataTable("divprofs")
     
    If cn.State Then cn.Close()
     
    cn.Open()
    dtProfDiv.Clear()
    daProfDiv.Fill(dtProfDiv)
    cn.Close()
     
    cn.Open()
     
    Dim drow As DataRow
     
    For Each itemProf In lstProfs.SelectedIndices
     
    For Each indexChecked In chkListDivs.CheckedIndices
     
    cmdAddProfDiv.Parameters("@idcla").Value = indexChecked + 1
    cmdAddProfDiv.Parameters("@idprof").Value = itemProf + 1
    cmdAddProfDiv.ExecuteNonQuery()
     
    Next
     
    Next
     
    MsgBox("Ajout avec Succès !", MsgBoxStyle.Information )
     
    cn.Close()
    cmdAddProfDiv.Dispose()
     
    End Sub
    Je m'excuse pour les balises code je crois que c'est une erreur de manipulation

    Merci d'avance

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par devman2011 Voir le message
    Je m'excuse pour les balises code je crois que c'est une erreur de manipulation
    Pas de problème, merci d'avoir corrigé C'est plus agréable à lire.

    Concernant ta question, tu as quasiment tout ce qu'il faut dans ton code. Il manque simplement le code permettant de vérifier la condition dont tu parles (savoir si les valeurs existent déjà) :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each itemProf In lstProfs.SelectedIndices
    ' Ici tu peux vérifier si le nombre de profs est > 1. Si oui, tu gères (lancement d'une exception, ou un MessageBox par exemple).
        For Each indexChecked In chkListDivs.CheckedIndices
            ' Ici tu peux faire tes vérifications sur les "DIV" (voir la requête #1 ci-dessous)
            cmdAddProfDiv.Parameters("@idcla").Value = indexChecked + 1
            cmdAddProfDiv.Parameters("@idprof").Value = itemProf + 1
            cmdAddProfDiv.ExecuteNonQuery() 
        Next 
    Next

    Pour faire la vérification, il te suffit de faire une simplement requête SQL et de compter les résultats retournés. On peut imaginer la requête suivante (Requête #1) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM DivProfs WHERE idcla = @idcla AND idprof = @idprof

    Si le résultat est > 0, alors tu as déjà une ligne dans la base de données. Si c'est <= 0, alors tu peux enregistrer.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 60
    Par défaut
    Un grand Merci ça marche bien sauf que le message à destination de l'utilisateur indiquant que les données entrées existent déjà et qu'il faudra entrer des données différentes se REPETE autant de fois dans la boucle FOR ... NEXT , et en plus le message indiquant le succès de l'enregistrement qui vient à la sortie des boucles FOR ... NEXT se REPETE lui aussi.

    Voici le code remanié suite à vos recommandations très précieuses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
     
            Dim cmdAddProfDiv As New SqlCommand
            cmdAddProfDiv.Connection = cn
            cmdAddProfDiv.CommandText = "insert into divprofs (idcla,idprof) values (@idcla,@idprof)"
     
            cmdAddProfDiv.Parameters.Clear()
     
            Dim pr_idcla As New SqlParameter("@idcla", SqlDbType.Int, 4)
            cmdAddProfDiv.Parameters.Add(pr_idcla)
     
            Dim pr_idprof As New SqlParameter("@idprof", SqlDbType.Int, 4)
            cmdAddProfDiv.Parameters.Add(pr_idprof)
     
     
            Dim strCheck As String = "SELECT COUNT(*) FROM divprofs WHERE idcla = @idcla AND idprof = @idprof"
            Dim cmdCheck As New SqlCommand
            cmdCheck.Connection = cn
            cmdCheck.CommandText = strCount
     
            cmdCheck.Parameters.Clear()
     
            Dim pr_idcl As New SqlParameter("@idcla", SqlDbType.Int, 4)
            cmdCheck.Parameters.Add(pr_idcl)
     
            Dim pr_idpro As New SqlParameter("@idprof", SqlDbType.Int, 4)
            cmdCheck.Parameters.Add(pr_idpro)
     
            If cn.State Then cn.Close()
     
            cn.Open()
     
            Dim nbRows As Integer
     
            For Each itemProf In lstProfs.SelectedIndices
     
                For Each indexChecked In chkListDivs.CheckedIndices
     
                    cmdCheck.Parameters("@idcla").Value = indexChecked + 1
                    cmdCheck.Parameters("@idprof").Value = itemProf + 1
                    nbRows = cmdCheck.ExecuteScalar
     
                    If nbRows > 0 Then
     
                        MsgBox("Les données entrées existent déjà ! veuillez en saisir d'autres", MsgBoxStyle.Critical , "Erreur")
     
                    Else
     
                        cmdAddProfDiv.Parameters("@idcla").Value = indexChecked + 1
                        cmdAddProfDiv.Parameters("@idprof").Value = itemProf + 1
                        cmdAddProfDiv.ExecuteNonQuery()
     
                    End If
     
                Next
     
            Next
     
            cn.Close()
            cmdAddProfDiv.Dispose()
     
            MsgBox("Enregistrement Réussi !", MsgBoxStyle.Information )
     
    End Sub

    Comment y remédier ? je vous en suis très reconnaissant et merci d'avance

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu as la possibilité de sortir de tes boules For et ForEach à tout moment, grâce à Exit For, ou Continue For selon le cas.

    Exemple :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each itemProf In lstProfs.SelectedIndices
     
        If condition_continue == True Then
            Continue For
        End If
     
        If condition_exit == True Then
             Exit For
        End If
     
    Next
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment les ITEMS d'une ListBox et d'une CheckedListBox
    Par devman2011 dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/10/2012, 16h08
  2. Changement ListBox à CheckedListBox
    Par max1395 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/04/2011, 20h45
  3. Réponses: 0
    Dernier message: 21/04/2010, 23h15
  4. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  5. vb.net: problème entre checkedlistbox/listbox
    Par 1coni dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/05/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo