1 pièce(s) jointe(s)
Update 42 differents textbox in a form
Bonjour,
Mon code ici se sépare en 3 parties, la première "ReadFirstLastName" fonctionne parfaitement, c'est-à-dire que les champs FirstName1 et LastName1 du formulaire "ACLoginForm" reçoivent leurs champs respectifs de la requête, donc, les champs "FirstName" et "LastName" de la requête qui ne contenait qu'un seul enregistrement car c'est ce que la requête demandait avec AutoID=1 - En regardant la requête vous comprendrez ce que je veux expliquer ici.
Voici la situation, dans ma table "Employees", il y a actuellement 3 enregistrements, cependant, mon formulaire a été conçu pour recevoir un maximum de 42 "FirstName" (textbox) et 42 "LastName" (textbox) et 42 Empl (boutons) soit de FirstName1 à LastName42 (84 items) et Empl1 à Empl42 soit les 42 boutons qui contiennent les photos des employés.
Ce qui fait un total de 84 textbox et 42 boutons s'il y avait 42 employés dans la table "Employees
".
Donc, vu qu'il n'y a que 3 employés il n'y a que 6 textbox à compléter soit de FirstName1 à LastName6 et 3 boutons (Empl1 à Empl3), les autres champs ne doivent pas apparaître si par exemple l'enregistrement 4 n'existe pas il y a 3 items dans mon formulaire qui ne devraient pas apparaître, soit FirstName4, LastName4 et Empl4. de même que tous les autres après. Les items FirstName5 jusqu'à LastName42 ainsi que leurs boutons respectifs Empl5 à Empl42 ne devraient pas être visible non plus.
J'espère que le code et l'image ci-dessous seront mieux vous expliquer.
Code:
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
| Private sub ReadFirstLastName()
Dim SQLCon As New SqlConnection With {.ConnectionString = "Server=CLAUDE-PC\AUTOCAISSESQL;database=ACData;User=programmeur;Pwd=mANONbENOIT1954;"}
Dim SQLcmd As SqlCommand
Dim READER As SqlDataReader
Try
SQLCon.Open()
Dim Query As String
Query = "SELECT AutoID, FirstName, LastName, Active FROM Employees WHERE AutoID = 1 And Active =1"
SQLcmd = New SqlCommand(Query, SQLCon)
READER = SQLcmd.ExecuteReader
While READER.Read
Me.FirstName1.Text = READER.Item(1)
Me.LastName1.Text = READER.Item(2)
End While
SQLCon.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
SQLCon.Dispose()
End try
End sub
Public Sub LoadFirstNameAndLastName()
Dim SQLCon As New SqlConnection With {.ConnectionString = "Server=CLAUDE-PC\AUTOCAISSESQL;database=ACData;User=programmeur;Pwd=mANONbENOIT1954;"}
Dim SQLcmd As SqlCommand
Dim READER As SqlDataReader
Try
SQLCon.Open()
Dim Query As String
Query = "SELECT AutoID, FirstName, LastName, Active FROM Employees WHERE Active =1"
SQLcmd = New SqlCommand(Query, SQLCon)
READER = SQLcmd.ExecuteReader
While READER.Read
Dim i As Integer
For i = 1 To 42
Me.FirstName1.Text = READER.Item(1)
Me.LastName1.Text = READER.Item(2)
Next
End While
SQLCon.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
SQLCon.Dispose()
End try
End sub
Private Sub ACLoginForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ReadFirstLastName()
'LoadFirstNameAndLastName()
End Sub |
Pièce jointe 537842
Sûrement pas, c'est pourquoi un débutant demande de l'aide
Bonjour,
Super, tu m'as ouvert les yeux, j'ai supprimé les 84 boîtes de texte et j'ai simplement inscrit le nom du champ Username de la requête comme caption sur le bouton de cette façon:
Code:
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
| Private sub GetButtonCaption()
Dim SQLCon As New SqlConnection With {.ConnectionString = "Server=CLAUDE-PC\AUTOCAISSESQL;database=ACData;User=programmeur;Pwd=mANONbENOIT1954;"}
Dim SQLcmd As SqlCommand
Dim READER As SqlDataReader
Try
SQLCon.Open()
Dim Query As String
Query = "SELECT AutoID, FirstName, LastName, Username, Active FROM EmployeesQuery WHERE AutoID = 1 And Active =1"
SQLcmd = New SqlCommand(Query, SQLCon)
READER = SQLcmd.ExecuteReader
While READER.Read
Me.Empl1.Text = READER.Item(3)
End While
SQLCon.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
SQLCon.Dispose()
End try
End sub
Private Sub ACLoginForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GetButtonCaption()
End Sub |
Et tout fonctionne pour le bouton Empl1, il ne me reste plus qu'à trouver le code pour que le champ Username pour les 42 enregistrements s'ils existent aillent se reporter automatiquement lors de l'ouverture du formulaire sur les boutons de Empl1 à Empl42.
Il faut également garder en mémoire que s'il n'y a que 3 employés, les boutons de Empl4 à Empl42 doivent être invisibles.
Mais c'est maintenant beaucoup plus simple.
Merci
Claude du Québec. Canada
2 pièce(s) jointe(s)
Ce dernier code a changé tous les boutons
Bonjour,
Oui, le dernier segment de code que tu as inscrit qui provient de la table solution MuchoBotons change le texte de tous les boutons de Bouton N° 1 à Bouton N° 42, cependant c'est le nom "Username" de la requête qu'on veut voir, et ça c'est plus difficile.
Je suis rendu là dans ce travail:
Lorsque je démarre la solution, le formulaire "ACLoginForm" s'ouvre et le Username qui a le champ "EmployeeNumber" 42 s'affiche automatiquement dans le "Button1" ce devrait être plutôt le Username "Claude Larocque" qui est le EmployeeNumber 1 surtout que ma requête est par ordre ascendant sur ce champ.
Vu que je ne sais pas exactement le code complet pour que tous les Username se retrouve sur le bouton respectif, c'est-à-dire "Button1" à "Button42" j'inscris mon code ici et une image, espérons qu'il y a quelqu'un qui pourra solutionner ce puzzle.
Je comprends parfaitement que la section suivante ne peut afficher qu'un seul username, mais ne devrait-il pas être Claude Larocque?
Me.Button1.Text =MyEmployees.Item(3)
Voici l'image de quelques boutons:
Pièce jointe 538459
Pièce jointe 538466
Code:
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
| Private Sub LoadFirstAndLastNamesOnButtons()
Dim MyConnexion As New SqlConnection
Dim MyCommande As New SqlCommand
MyConnexion.ConnectionString = "Server=CLAUDE-PC\AUTOCAISSESQL;database=ACData;User=sa;Pwd=mANONbENOIT1954***;"
MyConnexion.Open()
MyCommande = MyConnexion.CreateCommand()
MyCommande.CommandType = CommandType.Text
MyCommande.CommandText = "SELECT EmployeeNumber, FirstName, LastName, Username, Active FROM EmployeesQuery WHERE Active =1 ORDER BY EmployeeNumber ASC"
Dim MyEmployees As SqlDataReader ' Déclaration d'un objet DataReader
MyEmployees = MyCommande.ExecuteReader() ' La requête SELECT * retourne DES valeurs
Do While MyEmployees.Read ' qui sont stockées dans l'objet DataReader !! Il n'y ici qu'un seul enregistrement, EN PRINCIPE
Me.Button1.Text =MyEmployees.Item(3)
Loop
MyEmployees.Close()
MyCommande.Dispose()
MyConnexion.Close()
End Sub
Private Sub ACLoginForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadFirstAndLastNamesOnButtons()
End Sub |
1 pièce(s) jointe(s)
BINGO! Tout fonctionne parfaitement
Merci, l'image ci-dessous montre bien que la lecture de ma base de données SQL est parfaite et le texte sur tous les boutons est parfait également.
Je mets également mon code car j'ai une petite requête, j'aimerais que si le prénom (FirstName) de l'employé est "EMPLOYEE" ou que le champ Active = 0 alors le bouton correspondant au champ "EmployeeNumber" soit invisible, donc dans l'image ci-dessous les boutons Empl7 à Empl42 seraient invisibles. Dans ma base de données si j'inscris un nouvel employé je voudrais que le bouton correspondant soit visible de nouveau.
J'ai également placé "Dim ReadOnly MesBoutons(42) As Button" au niveau du formulaire comme indiqué, j'ai dû inscrire ReadOnly à cause d'une erreur s'il ne l'était pas, mais ça fonctionne.
Je vais essayer de trouver, mais c'est certain qu'un expert devrait savoir mieux qu'un débutant en VB.NET, Merci de prendre le temps de m'aider.
Le nom des boutons est Empl1 à Empl42 (Voir code)
Pièce jointe 538522
Code:
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
| Private Sub ChargeMesBoutons()
For B As Integer = 1 To 42
MesBoutons(B) = Me.Controls("Empl" & B)
Next
End Sub
Private Sub LoadUsernamesOnButtons()
Dim MyConnection As New SqlConnection
Dim MyCommande As SqlCommand
MyConnection.ConnectionString = "Server=CLAUDE-PC\AUTOCAISSESQL;database=ACData;User=sa;Pwd=mANONbENOIT1954***;"
MyConnection.Open()
MyCommande = MyConnection.CreateCommand()
MyCommande.CommandType = CommandType.Text
MyCommande.CommandText = "SELECT EmployeeNumber, FirstName, LastName, Username, Active FROM EmployeesQuery WHERE Active =1 ORDER BY EmployeeNumber ASC"
ChargeMesBoutons()
Dim MyEmployees As SqlDataReader
MyEmployees = MyCommande.ExecuteReader()
Do While MyEmployees.Read
MesBoutons(CType(MyEmployees.Item(0), Integer)).Text = MyEmployees.Item(3)
Loop
MyEmployees.Close()
MyCommande.Dispose()
MyConnection.Close()
End Sub
Private Sub ACLoginForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadUsernamesOnButtons()
End Sub |