oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010
-
22 juil. 2008 à 17:25
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010
-
29 juil. 2008 à 10:26
Bonjour,
Je suis en train de réaliser une application (codée en Vb.net sous visual studio 2008), cette dernière est divisée en trois couches (DAL, DAO et interface). Dans l'interface, j'ai une datagridview qui me permet d'afficher des lignes d'une table de ma base de données, ainsi je souhaite pouvoir modifier ces données. Pour mettre à jour les données de ma table, je veux créer autant de textbox, combobox ... que de colonne. Les combobox étant utilisée afin d'afficher des valeures imposées. J'ai réussi à créer autant de textbox que de colonnes du datagridview. Cependant pour ce qui est des combobox (valeures fixées dépendantes d'autres tables), je les ai crées directement dans l'interface et je les ai cachées avec la fonction visiblefalse dans la form_load. Mon problème est le suivant lorsque je recherche les combobox que je dois afficher (visibletrue), ces dernières ne s'affichent pas. La variable visible reste à false !
Voici le code :
------------------------------------------------------------------------------------------------------------------------------------
'Déclaration de la variable permettant de récupérer un controle correspondant à une colonne de la table.
Dim controlFound As System.Windows.Forms.ComboBox = Nothing
controlFound = CType(Controls.Item(datagridV.Columns(datagridV.CurrentRow.Cells(i).ColumnIndex).HeaderText), ComboBox)
'Si on trouve un controle correspondant
If (controlFound IsNot Nothing) Then
controlFound.Visible = True Else
[----]
------------------------------------------------------------------------------------------------------------------------------------
Les contrôles sont bien détectés à chaque fois mais n'apparaissent pas dans l'interface. Pouvez-vous m'aider à résoudre mon problème, j'ai tenté beaucoup de choses mais sans succès. Merci d'avance.
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 09:09
Bon eh bien je viens de trouver une solution, je ne sais pas pourquoi mais apparemment il faut que je mettes tous les combobox que je veux cacher au début de ma fonction qui parcourt ma Datagrid afin de créer et afficher mes textbox et combobox. Ensuite je peux enfin afficher comme je l'entends mes éléments. C'est vraiment bizarre que cela marche comme cela et pas comme avant.
Mon code est donc le suivant maintenant :
--------------------------------------------------------------------------------
Public Sub CreateTextBox(ByVal datagridV As DataGridView)
Dim top, i As Integer
Dim numeroTextBox As Integer
Dim textBoxName, labelName As String
top = 100
numeroTextBox = 1
For i = 0 To datagridV.ColumnCount - 1
Dim controlFound As System.Windows.Forms.ComboBox = Nothing
controlFound = CType(Controls.Item(datagridV.Columns(datagridV.CurrentRow.Cells(i).ColumnIndex).HeaderText), ComboBox)
'Si un controle a été trouvé, on le fait apparaitre
If (controlFound IsNot Nothing) Then
controlFound.Visible = True
Else
'Création des textBox et labels
Dim tbox As New System.Windows.Forms.TextBox()
Dim label As New System.Windows.Forms.Label()
'Remplissage du label et du textbox
labelName = "Label" & numeroTextBox
textBoxName = "TextBox" & numeroTextBox
label.Name = labelName
tbox.Name = textBoxName
tbox.Text = datagridV.CurrentRow.Cells(i).Value.ToString
label.Text = datagridV.Columns(datagridV.CurrentRow.Cells(i).ColumnIndex).HeaderText
'Ajout des controles à la forme
Controls.Add(label)
Controls.Add(tbox)
'Paramètrage de la position des éléments (textbox et label)
With label
.Visible = True
.Top = top + 2 'distance entre le bord de la fenetre et le bord du conteneur
.Left = 5 'distance entre le bord gauche de la fenetre et le bord du conteneur
.Width = 120 'la largeur de l'objet
End With
With tbox
.Visible = True
.Top = top 'distance entre le bord de la fenetre et le bord du conteneur
.Left = 160 'distance entre le bord gauche de la fenetre et le bord du conteneur
.Width = 130 'largeur de l'objet
.Height = 275 'hauteur de l'objet
End With
top = top + 50
numeroTextBox = numeroTextBox + 1
End If
Next
End Sub
------------------------------------------------------------------------------
Voila je l'ai mis en entier si jamais cela peut aider quelqu'un. En tout cas, merci quand même pour votre aide, si quelqu'un sait pourquoi cela ne marchait pas avant, je suis curieux de connaitre l'explication.
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 13:07
Oui c'est vraiment bizarre car là je viens de refaire le code sur une autre forme et là miracle : tout fonctionne ! On dira que c'était un bug passager de Visual Studio ! Merci pour votre aide !
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 08:13
Bonjour,
J'ai essayé comme tu m'as dit gillardg mais cela ne marche toujours pas, ma combobox n'apparait toujours pas. Si tu as une autre solution, je suis preneur. Merci déjà pour l'aide que tu m'as apporté.
Ce que je ne comprends pas, c'est que lorsque j'execute en mode debug en pas à pas, controlFound.Visible = True ne passe jamais à True, il semble comme figé à False, de plus si j'essaye de le modifier grâce au débuggeur et bien là encore c'est un échec. Je ne comprends vraiment pas.
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 08:43
Mon contrôle est sur ma form, il n'y a rien d'autre, alors je ne penses pas qu'il soit caché par un autre élément, d'ailleurs si je les affiches du début et bien je n'ai aucun problème. Je viens de ressayer en les cachant avec la fonction Hide dans le formload puis en utilisant show pour les faire apparaitre mais rien n'y fait.
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 14:37
Décidément c'est pas ma journée... j'ai encore un bug bizarre avec l'une de mes combobox. J'ai donc plusieurs combobox qui apparaissent correctement, mon soucis maintenant et que je n'arrivent pas à sélectionner le texte sélectionné dans deux de mes combobox. Pourtant la première, j'arrive très bien à récupérer mais les deux autres, il me retourne rien !
Je ne comprends pas car j'utilise la fonction combobox.selectedText, et cela marche pour la première mais pas pour les autres. J'ai même essayer d'utiliser la fonction combobox.selectedValue. Je ne sais pas si c'est moi qui ne comprend rien ou si l'ordinateur qui en fait qu'à sa tête mais là je suis à court d'idées.. Donc si une âme charitable pourrait m'aider, j'en serais ravi. Merci d'avance !
oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010 23 juil. 2008 à 15:36
Mauvaise nouvelle ou bonne... tout dépend.. J'ai pas de virus ou plutôt aucun virus n'a été détecté ! Bon allez je vais continuer de plancher la dessus. Merci pour ton aide gillardg.