Datagrid et case à coché

riorio1988 Messages postés 3 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 12 décembre 2008 - 12 déc. 2008 à 00:43
riorio1988 Messages postés 3 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 12 décembre 2008 - 12 déc. 2008 à 16:04
-je travaille avec une base de données sqlserver2005 et vb.net2008
j'ai
-une table dont le nom est "cuve":
modele relationnel cuve(id_cuve,libelle_cuve)

-j'ai utilisé un controle qui existe par defaut dans le visual basic qui est "datagridview" que j'ai nomé "datagridview1"
et j'ai pu extraire les données que contient ma table "cuve" dans  la "datagridview1"

-j'ai ajouté une autre colonne à cet "datagridview1" ,le type de cette colonne c'est:"datagridviewcheckboxcolumn"

-maintenant je veux faire un test:
_j'ai inserer un button dans ma formulaire et au moment du clique:
je veux tester si l'utilisateur  coché le checkbox ou non.

j'ai déja éssayé ce code mé le probleme qu'il ne marche pas:

if datagridview1.rows(0).cells(1).value= true then
msgbox("la case est coché")
else if datagridview1.rows(0).cells(1).value =false then
msgbox("la case n'est pas coché")
end if
_ j'ai aussi utilisé au lieu de true et false : 0 et 1 mais c le meme
le message c'est:
la case n'est pas cochée
meme si la case est cochée.
vp aidez moi c'est urgent
merci d'avance

6 réponses

lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
12 déc. 2008 à 08:38
Bonjour,

Il me semble que tu testes ta colonne 0 et non ta colonne 1 qui contient tes cases à cocher.
Essaye :
if datagridview1.rows(1).cells(1).value= true then
   msgbox("la case est coché")
else if datagridview1.rows( 1 ).cells(1).value =false then
   msgbox("la case n'est pas coché")
end if

S.L.B.
<hr />
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
12 déc. 2008 à 13:07
Salut,

Je vais te met un code qui va te permettre d'ajouter dynamiquement une CheckBox dans une cellule de ton DataGridView en spécifiant la ligne et la colonne où tu veux ajouter ta CheckBox.

Ce code assure aussi une mise à jour automatique du positionnement et des dimensions de la CheckBox (lors de la redimensionnement d'une colonne de ton DataGridView) enfin que celle-ci reste dans la cellule où on l'a ajoutée.

Et enfin, le code détectera si la CheckBox est cochée ou non.

Note : Pense à déclarer au début de ta Class la variable suivante :

Public List_CheckBox As New System.Collections.Generic.List(Of CheckBox)

Sans plus attendre, voici le code :



Fonction ajoutant une CheckBox dans le DataGridView :




Syntaxe (Exemple) :

Ajouter_CheckBox_DataGridView(DataGridView1, 0, 0)




Note : Ajoute une CheckBox dans le DataGridView1 (cells(0,0) >>> 1° ligne, 1° colonne)








Sub Ajouter_CheckBox_DataGridView(ByVal controle_target As DataGridView, ByVal no_ligne As Integer, ByVal no_colonne As Integer)

     ' Teste si le 2° paramètre no_ligne est compris entre 0 et le nombre de ligne du DatagridView - 1
     If no_ligne < 0 Then
          MsgBox("Désolé, le 2° paramètre no_ligne de la fonction est incorrecte")
          Exit Sub
     End If

     ' Teste si no_ligne correspond à l'index d'un item existant
     If no_ligne > controle_target.Rows.Count - 1 Then
          MsgBox("Désolé, l'item ayant pour index " + no_ligne.ToString + " n'existe pas")
          Exit Sub
     End If

     ' Teste si le 3° paramètre no_colonne est compris entre 0 et le nombre de colonnes du DataGridView - 1
     If no_colonne < 0 Then
          MsgBox("Désolé, le 3° paramètre no_colonne de la fonction est incorrecte")
          Exit Sub
     End If

     ' Teste si no_colonne correspond à l'index d'une colonne existante
     If no_colonne > controle_target.Columns.Count - 1 Then
          MsgBox("Désolé, la colonne ayant pour index " + no_colonne.ToString + " n'existe pas")
          Exit Sub
     End If

     ' Déclare et initialise la CheckBox à rajouter
     Dim Control As New CheckBox

     ' Ajoute la CheckBox dans une collection de CheckBox
     ' Dans le cas, si on souhaite agir sur certaines de ses propriétés
     List_CheckBox.Add(Control)

     ' Utilise la propriété Tag pour se souvenir où a été ajouté le contrôle
     List_CheckBox.Item(List_CheckBox.Count - 1).Tag = no_ligne.ToString + "|" + no_colonne.ToString

     controle_target.Controls.Add(List_CheckBox.Item(List_CheckBox.Count - 1))

     ' Place controle_add dans la cellule choisie
     With controle_target.GetCellDisplayRectangle(no_colonne, no_ligne, False)
          List_CheckBox.Item(List_CheckBox.Count - 1).Top = .Top
          List_CheckBox.Item(List_CheckBox.Count - 1).Left = .Left
          List_CheckBox.Item(List_CheckBox.Count - 1).Width = .Width
          List_CheckBox.Item(List_CheckBox.Count - 1).Height = .Height
     End With

     ' Ajoute un évènement ColumnWidthChanging et l'associe à la fonction MAJ_positions_dimensions_controles_DataGridView
     ' La fonction se déclenchera dés que la largeur d'une colonne sera modifiée
     AddHandler controle_target.ColumnWidthChanged, AddressOf MAJ_positions_dimensions_controles_DataGridView

End Sub





Fonction effectuant la mise à jour du positionnement et des dimensions du ou des CheckBox ajoutées :

Note : Faire juste un copier coller de cette fonction, elle s'exécute automatiquement






Sub MAJ_positions_dimensions_controles_DataGridView(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs)

     For nb As Integer = 0 To sender.Controls.Count - 1
          For nbitem As Integer = 0 To sender.Rows.Count - 1
               If e.Column.Index  <>  0 Then
                    If sender.Controls(nb).Tag  = nbitem.ToString + "|" + (e.Column.Index - 1).ToString Then
                         With sender.GetCellDisplayRectangle(e.Column.Index - 1, nbitem, False)
                              sender.Controls(nb).Top = .Top
                              sender.Controls(nb).Left = .Left
                              sender.Controls(nb).Width = .Width
                              sender.Controls(nb).Height = .Height
                              sender.Controls(nb).Refresh()
                         End With
                    End If
                End If
                For nbre_colonnes As Integer = e.Column.Index To sender.Columns.Count - 1
                     If sender.Controls(nb).Tag = nbitem.ToString + "|" + (nbre_colonnes).ToString Then
                          With sender.GetCellDisplayRectangle(nbre_colonnes, nbitem, False)
                               sender.Controls(nb).Top = .Top
                               sender.Controls(nb).Left = .Left
                               sender.Controls(nb).Width = .Width
                               sender.Controls(nb).Height = .Height
                               sender.Controls(nb).Refresh()
                          End With
                    End If
               Next
          Next
     Next

End Sub





Fonction permettant de tester si une CheckBox est cochée ou non en spécifiant le numéro de ligne et le numéro de colonne où elle se trouve dans le DataGridView

Cette fonction retourne True si la ChechBox est cochée sinon c'est False




Exemple utilisation :





If detecter_checkbox_cochee_datagridview(0, 1) Then
     MsgBox("La CheckBox est cochée")
Else
     MsgBox("La CheckBox n'est pas cochée")
End If

Note : Test si la CheckBox se trouvant ligne 0 colonne 1 est cochée ou non





Function detecter_checkbox_cochee_datagridview(ByVal no_ligne As Integer, ByVal no_colonne As Integer) As Boolean

     Dim verif As Boolean = False

     For nbitem As Integer = 0 To List_CheckBox.Count - 1
          If List_CheckBox.Item(nbitem).Tag = no_ligne.ToString + "|" + no_colonne.ToString Then
               verif = True
          End If
     Next



     If verif = False Then
          MsgBox("Aucune CheckBox ne se trouve à la cellule (" + no_ligne.ToString + "," + no_colonne + ")")
     End If




     Return verif

End Function






Si tu as des questions, n'hésites pas

++

Fauve
Pensez : Réponse Acceptée 
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
12 déc. 2008 à 13:12
Oups, désolé, je n'ai pas pris la bonne version pour la fonction




MAJ_positions_dimensions_controles_DataGridView








Voici la bonne :




Sub MAJ_positions_dimensions_controles_DataGridView(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs)

     For nb As Integer =  0 To List_CheckBox.Count - 1
          For nbitem As Integer = 0 To sender.Rows.Count - 1
               If e.Column.Index  <>  0 Then
                    If List_CheckBox.Item(nb).Tag  = nbitem.ToString + "|" + (e.Column.Index - 1).ToString Then
                         With sender.GetCellDisplayRectangle(e.Column.Index - 1, nbitem, False)
                              List_CheckBox.Item(nb).Top = .Top
                              List_CheckBox.Item(nb).Left = .Left
                              List_CheckBox.Item(nb).Width = .Width
                              List_CheckBox.Item(nb).Height = .Height
                              List_CheckBox.Item(nb).Refresh()
                         End With
                    End If
                End If
                For nbre_colonnes As Integer = e.Column.Index To sender.Columns.Count - 1
                     If List_CheckBox.Item(nb).Tag = nbitem.ToString + "|" + (nbre_colonnes).ToString Then
                          With sender.GetCellDisplayRectangle(nbre_colonnes, nbitem, False)
                               List_CheckBox.Item(nb).Top = .Top
                               List_CheckBox.Item(nb).Left = .Left
                               List_CheckBox.Item(nb).Width = .Width
                               List_CheckBox.Item(nb).Height = .Height
                               List_CheckBox.Item(nb).Refresh()
                          End With
                    End If
               Next
          Next
     Next

End Sub



++

Fauve
Pensez : Réponse Acceptée 
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
12 déc. 2008 à 13:28
Ben décidément, j'en oublie des choses aujourd'hui. C'est bien de rechercher la CheckBox voulue mais encore faut il qu'on teste son état

C'est les inconvénients de coder à 2h du matin

Voici la version correcte de la fonction detecter_checkbox_cochee_datagridview





Function detecter_checkbox_cochee_datagridview(ByVal no_ligne As Integer, ByVal no_colonne As Integer) As Boolean

     Dim verif As Boolean = False

     For nbitem As Integer = 0 To List_CheckBox.Count - 1
          If List_CheckBox.Item(nbitem).Tag = no_ligne.ToString + "|" + no_colonne.ToString Then
              

If List_CheckBox.Item(nbitem).Checked = True Then
                    verif = True
               End If




          End If
     Next



    


Return verif

End Function



Note : cette fois-ci c'est bon enfin j'espère non je rigole

++

Fauve
Pensez : Réponse Acceptée 
0

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

Posez votre question
riorio1988 Messages postés 3 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 12 décembre 2008
12 déc. 2008 à 15:36
salut tout le monde,
je vous remercie pour votre aide,et je suis heureuse de trouver une solution,de plus c simple et ce n'ai pas compliqué:
1)pour ajouter une nouvelle colonne à ta datagrid:
juste en haut de votre control  datagrid ,il y a une petite fléche,
-Quiliquer  sur cette fléche
-Choisir "add column"
-Nommé ta colone "name"
-Choisiser comme type "datagridviewcheckboxcolumn"
-Ecrire dans "header text" le nom de la colonne qui va etre affiché
-Cliquer sur "ok"
- et c'est bon une colonne sera ajoutée
2)Vous devez modifier les propriétés de la colonne ajoutée et pour cela :
uste en haut de votre control  datagrid ,il y a une petite fléche,

-Quiliquer  sur cette fléche

-Choisissez "edit column"
-Choisissez la colonne de checkbox maintenant
-Et dans les propriétés de cette colone voudevez mettre dans :
la propriété "Falsevalue" on met la valeur 0
la propriété "Truevalue"on met la valeur 1
- Cliquez sur Ok
Et maintenant le code que j'ai mis il marche:
j'ai inserer un boutton pour tester que j'ai nomé "button1"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
if datagridview1.rows(0).cells(0).value= 1 then
msgbox("la case est coché")
else if datagridview1.rows(0).cells(0).value =0 then
msgbox("la case n'est pas coché")
End if
End sub
Explication: rows=ligne
rows(0)=premiere ligne dans la datagridview1
cells=cellule
cells(0)=Premiere cellule
et bien sur datagridview1 c'est  la datagrid
 et voilà, Vous le pouvez l'essayé.
En tout les cas je vous remercie.
à+

 
0
riorio1988 Messages postés 3 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 12 décembre 2008
12 déc. 2008 à 16:04
Salut,
SVP j'ai besoin de
votre aide. Je veus extraire des donnees de plusieurs tables c-a-d je veux
creer une sqlcommand qui contient une requette sql imbriquée par exple :




'*********************************************



cn = New
SqlConnection()




a ="Data Source=.\sqlexpress;Initial Catalog=station;Integrated Security=True"


cn.ConnectionString = a








 
cmd New SqlCommand()cmd.Connection cn

cmd.CommandText =

"SELECT
code_service_achete ,service_achete.code_categorie,
categorie.libelle_categorie,libelle_service,prix_achat_service,
prix_vente_service,tva  from
categorie, service_achete,TVA where service_achete.tva=TVA.code_tva and
service_achete.code_categorie=categorie.code_categorie"cn.Open()
adapt New SqlDataAdapter(cmd)st

New DataSetadapt.Fill(st,

????)table = st.Tables(????)

'*********************************************
Qu'est ce que je dois mettre a la place des "????"

Merci d'avance !!!
0
Rejoignez-nous