Label champs sql checkedlistchanged

Résolu
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010 - 13 juin 2010 à 11:59
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010 - 15 juin 2010 à 16:46
Hey,

Voila je rencontre un petit soucis de codding sous vb.net 2k10.

Sous ma form j'ai inclus une checkedlistbox, ou j'y ai fait affiché un string particulier de ma bdd (exemple des strings: Id, Members, Country, Work) elle affiche donc le strings Members, jusque la tout va bien.
Ensuite je désire lorsque que je clique sur le nom d'un membres dans la checkedlistbox, faire apparaitre dans plusieurs label simultanément les autres strings correspond.
Ex: je clic sur toto, sa m'affiche dans le label1 "Montélimar" dans le label2 "Cuisinier", le tout récupérer via la bdd.

J'espère avoir été assez clair, après de nombreuse recherche je ne trouve pas vraiment ce que je souhaite.

Merci à vous

17 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 15:41
Autant pour moi c'est une erreur de ma part

J'ai oublié d'instancier la DataTable, remplace :

Dim dt As DataTable = Nothing


Par :

Dim dt As New DataTable


Comme je ne possède pas ta base et que je n'avais pas envie de la recréer, je n'ai pas pu tester le code.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 16:14
Pourtant dans le code posté c'était bon ?

If Index <> -1 And Index < (dt.Rows.Count - 1) Then


Attention :

Index < (dt.Rows.Count - 0) = Index < dt.Rows.Count

Si ton Index dépasse ou est égale au nombre d'élément de ta liste à cause d'une différence de mise à jour de la table, cela provoquera une exception.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 16:44
Salut,

Etant donné que le CheckedListBox n'est pas conçu pour travailler avec les données comme le ListBox classique, il va te faloir récupérer l'id du membre sélectionné et faire une requête SELECT avec une clause WHERE en passant celui-ci en référence, après avoir reçu le résultat, il ne te restera plus qu'a l'afficher dans tes labels.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
13 juin 2010 à 17:33
Ok merci pour ta réponse, mais j'ai un peu de mal à visualisé le déroulement à effectuer, pourrais tu me donner un exemple avec du code svp ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 juin 2010 à 17:40
Pas possible, je ne peux pas te donner un exemple de code pour l'accès aux données d'une table dont j'ignore tout !

Poste déjà le code qui te permet de remplir ta listbox, et fais un listing des champs que tu voudrais afficher avec leur nom exacte dans ta base, je verrais ce que je peux faire.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
13 juin 2010 à 23:33
Ok autant pour moi, je vous fait sa de suite.

Mon Code de connexion et de listing dans ma CheckedBoxList:
'Les Imports
Imports MySql.Data.MySqlClient ' Require MySQL Connector .Net this is to import MySQL.NET (%windir%\assembly\GAC\MySql.Data\1.0.7.30072__c5687fc88969c44d\MySql.Data.dll)
Imports System.Data.SqlClient
'dans ma form

'les declaration
    Dim HostConn As New MySqlConnection
    Dim da As MySqlDataAdapter
    Dim dt As DataTable
    Dim ds As New DataSet
    Dim i As Integer
'puis dans mon form_load
        HostConn.ConnectionString = "server=myserver;" _
                             & "user id=myuser;" _
                             & "password=mypass;" _
                             & "database=mydatabase"

        Try
            HostConn.Open()
            da = New MySqlDataAdapter("SELECT * FROM MySqlTest", HostConn)
            da.Fill(ds, "MySqlTest")
            
            For Me.i = 0 To ds.Tables(0).Rows.Count - 1
                CheckedListBox1.Items.Add(ds.Tables(0).Rows(i)(1))
            Next i
        Catch myerror As MySqlException

            MsgBox("" & myerror.Message, MsgBoxStyle.Critical)
        End Try


Ma Sql de test:
CREATE TABLE IF NOT EXISTS `MySqlTest` (
  `SQLID` smallint(6) unsigned NOT NULL,
  `SQLName` tinytext COLLATE latin1_general_ci NOT NULL,
  `SQLMetier` text COLLATE latin1_general_ci NOT NULL,
  `SQLPays` text COLLATE latin1_general_ci NOT NULL,
  `SQLSiteWeb` text COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`SQLID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `MySqlTest` (`SQLID`, `SQLName`, `SQLMetier`, `SQLPays`, `SQLSiteWeb`) VALUES
(1, 'Eric', 'Cuisto', 'France', 'http://..'),
(2, 'Jean', 'Militaire', 'Espagne', 'http://..'),
(3, 'Paul', 'Vendeur', 'Etats Unis', 'http://..');


Dans ma CheckedListBox, j'ai fait s'afficher le nom des personnes, à la sélection d'un nom je cherche à afficher dans les label les infos complémentaires comme ceci:
Label1 => le métier (SQLMetier)
Label2 => Le pays (SQLPays)
Label3 => Le Site Web (SQLSiteWeb)

Voila j'espère que c'est assez complet.

Merci à vous ;)
0
tomass87 Messages postés 10 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 13:39
Voilà mon code modifier pour toi (normalement il va alléger ton code et tu pourrais meme le reprendre pour ta première partie, mais je sais pas si ça marche avec une CheckedListBox c'est à vérifier) :

Using conn As MySqlConnection = New MySqlConnection("server=myserver; uid=myuser;pwd=mypass;database=mydatabase;") 
Using cmd As MySqlCommand = New MySqlCommand("SELECT SQLMetier FROM MySqlTest where SQLName='" & CheckedListBox1.Text & "'", conn) 

conn.Open() 

Using reader As MySqlDataReader = cmd.ExecuteReader() 

While reader.Read() 
Label1.Text = reader("id") 
End While 

End Using 

End Using 
End Using 


Normalement ça devrait répondre à tes attentes, si c'est pas ce que tu cherche à faire ça veut dire que je n'ai rien compris à ton problème

ps: ce code marchera que sur la CheckedListBox1_SelectedText ou un truc du genre et sinon ce code permet just de récupérer le Métier dans le label1 pour le pays et le site il faut que tu refasse le code en changant la requete sql et le label

Cordialement.
0
tomass87 Messages postés 10 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 13:42
Oups je me suis trompé à un endroit j'ai mis :

label1.text = reader("id")

mais en faites il faut mettre :

label1.text = reader("SQLMetier")

Voilà et n'hésite pas à demander si ça ne marche toujours pas .
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 14:28
tomass87> Ce n'est pas une bonne idée, ta requête SELECT recherche l'utilisateur par son nom et non par son ID, ton code ne fonctionnera pas si dans la base il y a plusieurs utilisateurs portant le même nom.

De plus elle exécute une requête SQL à chaque changement sur la liste ce n'est pas très optimisé.

Comme je l'ai dis plus haut le plus simple serait d'utiliser une ListBox Classique qui possède les propriétés DatSource, DisplayMember et ValueMember, seul bémol, elle ne gère pas les checkbox.

Je pense que le plus simple serait de Garder la DataTable en mémoire (déclaré au sein du formulaire) et de se référer à l'index de la listbox sélectionner pour avoir la ligne correspondante dans cette DataTable.

Imports MySql.Data.MySqlClient
Imports System.Data.SqlClient
' 
Public Class Form1
    '
    Dim dt As DataTable = Nothing
    '
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '
        Dim HostConn As New MySqlConnection("ta chaine de connexion")
        Try
            Dim da As New MySqlDataAdapter("SELECT * FROM MySqlTest", HostConn)
            HostConn.Open()
            da.Fill(dt)
            For Each Row As DataRow In dt.Rows
                CheckedListBox1.Items.Add(Row.Item("SQLName"))
            Next
        Catch myerror As MySqlException
            MsgBox(myerror.Message, MsgBoxStyle.Critical)
        Finally
            If HostConn.State <> ConnectionState.Closed Then
                HostConn.Close()
            End If
        End Try
        '
    End Sub
 
    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
        '
        Dim Index As Integer = CheckedListBox1.SelectedIndex
        If Index <> -1 And Index < (dt.Rows.Count - 1) Then
            Label1.Text = dt.Rows(Index).Item("SQLMetier")
            Label2.Text = dt.Rows(Index).Item("SQLPays")
            Label3.Text = dt.Rows(Index).Item("SQLSiteWeb")
        End If
        '
    End Sub
    '
End Class


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 15:12
Merci à vous deux de passer du temps sur mon soucis ;)

Thomas votre code fonctionne, avec quelques petit arrangements comme vous l'aviez stipuler, mais ce n'est pas exactement ce que je recherche.

Mayzz vous tapez en plein dans ce que je souhaite réaliser, cependant rien de s'affiche dans ma CheckedListBox avec votre code, il doit y avoir un truc qui m'échappe une bourde de ma part peut être ?

J'ai remarquer que Vous passiez directement via datatable alors que moi sur mon code de départ, j'étais obliger de passer via dataset pour afficher le contenu, cela vient peut être de la ?
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 15:20
Dim HostConn As New MySqlConnection("ta chaine de connexion")


As-tu remplacer ta chaine de connexion ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 15:35
Oui bien sur:
Dim HostConn As New MySqlConnection("server=localhost; uid=MyUser; pwd=MyPass; database=MyDatabase;")

J'ai essayer de mettre sa dans un bouton.click pour afficher l'erreur engendrer et j'obtiens ceci:

La valeur ne peut pas être null.
Nom du paramètre : dataTable
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 16:05
Super sa fonctionne, par contre le dernier "nom" qui apparait dans la checkedlistbox na aucune action est ce normal ?
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 16:08
Ok désolé, je vient de regarder et j'ai vu ceci:
If Index <> -0 And Index < (dt.Rows.Count - 0) Then

J'ai remplacer par:
If Index <> -1 And Index < (dt.Rows.Count - 0) Then

Tout fonctionne parfaitement, Merci beaucoup Mayzz t'es un chef ;)
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 16:39
Ok c'est noté, j'ai remplacer par ce que vous venez de notifier et sa fonctionne.

Sur le code posté:
If Index <> -1 And Index < (dt.Rows.Count - 1) Then

Le dernier choix de la liste n'avait aucune action c'est moi qui me suis planter ci dessus en écrivant
If Index <> -0 And Index < (dt.Rows.Count - 0) Then

sur le code c'etait bien argumenter comme cela
If Index <> -1 And Index < (dt.Rows.Count - 1) Then

Mais comme je l'ai dit le dernier choix dans la liste n'avait aucune action, j'ai donc remplacer par:
If Index <> -1 And Index < (dt.Rows.Count - 0) Then

pour que cela fonctionne.

Puis je vient de remplacer par le dernier code que vous avez notez et cela fonctionne.

Encore merci
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 16:41
en effet, encore une erreur de ma part, c'est bien '< dt.Rows.Count'

et non -1 étant données que l'index commence à 0 et non à 1

Arf, pas évident sans tester !

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
NvZ75 Messages postés 24 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 15 juin 2010
15 juin 2010 à 16:46
Aucun soucis, sa fonctionne c'est le principal, pour quelqu'un qui na pas tester c'etait même plutôt bon à vrai dire ;)
0
Rejoignez-nous