Récupération des données ligne sélectionnée dans GridView
Fermé
Ilovedev
Messages postés
16
Date d'inscription
mardi 24 décembre 2013
Statut
Membre
Dernière intervention
22 janvier 2014
-
6 janv. 2014 à 13:37
Ilovedev Messages postés 16 Date d'inscription mardi 24 décembre 2013 Statut Membre Dernière intervention 22 janvier 2014 - 8 janv. 2014 à 08:52
Ilovedev Messages postés 16 Date d'inscription mardi 24 décembre 2013 Statut Membre Dernière intervention 22 janvier 2014 - 8 janv. 2014 à 08:52
A voir également:
- Récupération des données ligne sélectionnée dans GridView
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Site de vente en ligne particulier - Guide
- Recuperation de données - Guide
- Apparaitre hors ligne instagram - Guide
6 réponses
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
6 janv. 2014 à 21:24
6 janv. 2014 à 21:24
Bonjour,
Quel Langage de programmation ?
Quel type de BD ?
Procédure stockée dans quel langage ?
Utilise-tu un objet BindingSource pour tes DtatGridView.
Utilise-tu une architecture organique pour accéder à ta BD.
Ces éléments sont nécessaire pour savoir comment t'aider.
Je si comprends, lorsque tu sélectionne un ligne dans Grid1, Grid2 se met à jour automatiquement !
Pour récupérer les données de ta Grid1, ça devrait ressembler à quelque chose come suit :
K
Quel Langage de programmation ?
Quel type de BD ?
Procédure stockée dans quel langage ?
Utilise-tu un objet BindingSource pour tes DtatGridView.
Utilise-tu une architecture organique pour accéder à ta BD.
Ces éléments sont nécessaire pour savoir comment t'aider.
Je si comprends, lorsque tu sélectionne un ligne dans Grid1, Grid2 se met à jour automatiquement !
Pour récupérer les données de ta Grid1, ça devrait ressembler à quelque chose come suit :
Private Sub DGV_Solutions_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGV_Solutions.SelectionChanged
Dim Texte As New System.Text.StringBuilder
Dim Indice As Int32 = Me.DGV_Solutions.CurrentRow.Index
Dim ColIndice As Int32 = Me.DGV_Solutions.RowCount - 1
For Boucle As Int32 = 0 To ColIndice
Texte.AppendLine(DirectCast(Me.DGV_Solutions.Item(Boucle, Indice).Value, String))
Next
MessageBox.Show(Texte.ToString)
End Sub
K
Ilovedev
Messages postés
16
Date d'inscription
mardi 24 décembre 2013
Statut
Membre
Dernière intervention
22 janvier 2014
7 janv. 2014 à 09:09
7 janv. 2014 à 09:09
Bonjour Kalissi et merci...
Effectivement, j'ai donné très peu d'informations !
Je programme en C# (technologie ASP.NET), et ma BD est sous SQL.
Et comme tu l'as compris, lorsque je selectionne une ligne dans ma Grid 1, ma Grid 2 récupère les données composant cette ligne. J'aimerai que ma Grid 2 puisse être dans une autre page "Recap" et pouvoir supprimer ou modifier ces données dans ma BD par la suite.
J'ai écrit mes procédures stockées directement dans SQL ou je déclare comme paramêtre l'ID de la ligne sélectionnée...
J'espère être assez claire avec toi je débute et j'avoue que beaucoup de notions me sont encore aujourd'hui très abstraites.
Si tu as une idée ou même un exemple de code, je t'en remercie vivement par avance :o)
Effectivement, j'ai donné très peu d'informations !
Je programme en C# (technologie ASP.NET), et ma BD est sous SQL.
Et comme tu l'as compris, lorsque je selectionne une ligne dans ma Grid 1, ma Grid 2 récupère les données composant cette ligne. J'aimerai que ma Grid 2 puisse être dans une autre page "Recap" et pouvoir supprimer ou modifier ces données dans ma BD par la suite.
J'ai écrit mes procédures stockées directement dans SQL ou je déclare comme paramêtre l'ID de la ligne sélectionnée...
J'espère être assez claire avec toi je débute et j'avoue que beaucoup de notions me sont encore aujourd'hui très abstraites.
Si tu as une idée ou même un exemple de code, je t'en remercie vivement par avance :o)
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
Modifié par Kalissi le 7/01/2014 à 14:23
Modifié par Kalissi le 7/01/2014 à 14:23
Salut,
Malheureusement, je ne développe pas en CSharp, toutefois je peux tenter de t'expliquer le principe et te fournir des exemple de code en VB qui tu devrais pouvoir traduire en CSharp.
Décomposer en modèle organique ta solution.
Premier projet (Modele_Commun)
Deuxième projet - 3 Classes
Première classe (Modele_Entite) - L'entité
Deuxième projet
Deuxième classe (Modele_Criteres) - Les critères de requêtes
Deuxième projet
Troisième Classe (Modele_ListeTable) - Les listes fortements typés
Troisième projet - 3 Classes
Première classe - Les requêtes
Troisième projet - 3 Classes
Deuxième classe - L'exécution des requêtes
Troisième projet - 3 Classes
Troisième classe - Le controleur
Dernier Projet - 2 Formes
Form Secondaire
En résumé, une solution, 4 projets, 7 Classes, 2 Form.
En pratique, tu ne travaille jamais directement sur ta(es) grille(s),
tu travaille dans la(es) liste(s) fortement(s) typé(s), et tu affiche le contenu de la(es) liste(s) dans la(es) grille(s).
Regarde du côté des méthodes LinQ pour ordonné tes listes de façon à
faire concorder l'index de ta grille avec l'Index de la liste fortement typé.
Ainsi, tu ne récupère pas tes données de la grille mais bien de la liste fortement typé.
Voilà, je ne peux t'aider davantage, comme spécifié je ne code pas en CSharp,
mais j'ai déjà converti du CSharp en VB à l'aide de convertisseur sur la toile.
Et j'ai réalisé, que ma requète UPDATE n'est pas complète ...
K
Malheureusement, je ne développe pas en CSharp, toutefois je peux tenter de t'expliquer le principe et te fournir des exemple de code en VB qui tu devrais pouvoir traduire en CSharp.
Décomposer en modèle organique ta solution.
Premier projet (Modele_Commun)
''' <summary>
''' Déclaration des constantes communes à l'ensemble de la solution PC_config
''' </summary>
''' <remarks></remarks>
Public Class Modele_Communaute
#Region "--- Constantes ---"
#Region "--- Constantes publiques à la solutions ---"
' Taper 3 apostrophes de façon systématique sur la ligne suivante :
' au même alinéa que le P de Public et le modèle de le doc xml apparaîtra
Public Const iCol_id_Ind1 As Int32 = 0
Public Const iCol_pseudo_Ind2 As Int32 = 1
Public Const iCol_pass_Ind3 As Int32 = 2
Public Const iCol_email_Ind4 As Int32 = 3
Public Const iCol_date_inscr_Ind5 As Int32 = 4
Public Const BDNomTable As String = "historique.membres"
Public Const BD100Id As String = "id" ' Type String
Public Const BD110Pseudo As String = "pseudo" ' Type String
Public Const BD120Pass As String = "pass" ' Type String
Public Const BD130Email As String = "email" ' Type String
Public Const BD140DtInscr As String = "date_inscription" ' Type Date
' Dernier champ sinon augmenter les indices de collonnes
' précédément définis
#End Region
#End Region
End Class
Deuxième projet - 3 Classes
Première classe (Modele_Entite) - L'entité
''' <summary>
''' Facette de la BD selon la table [ membre ]
''' </summary>
''' <remarks></remarks>
Public Class ModeleEntite
#Region "--- Région Attributs ---"
' TODO - Remplacer les noms d'attributs pas des noms significatifs
Private zBD100Id As String = String.Empty
Private zBD110Pseudo As String = String.Empty
Private zBD120Pass As String = String.Empty
Private zBD130Email As String = String.Empty
Private zBD140DtInscr As Date
Private zEstNouveau As Boolean = False
Private zEstModifier As Boolean = False
Private zEstSupprimer As Boolean = False
#End Region
#Region "--- Région Propriétés ---"
' TODO - Remplacer les noms de propriétéss pas des noms significatifs
Public Property id() As String
Get
Return Me.zBD100Id
End Get
Set(ByVal value As String)
Me.zBD100Id = value
End Set
End Property
Public Property pseudo() As String
Get
Return Me.zBD110Pseudo
End Get
Set(ByVal value As String)
Me.zBD110Pseudo = value
End Set
End Property
Public Property pass() As String
Get
Return Me.zBD120Pass
End Get
Set(ByVal value As String)
Me.zBD120Pass = value
End Set
End Property
Public Property email() As String
Get
Return Me.zBD130Email
End Get
Set(ByVal value As String)
Me.zBD130Email = value
End Set
End Property
Public Property date_inscription() As Date
Get
Return Me.zBD140DtInscr
End Get
Set(ByVal value As Date)
Me.zBD140DtInscr = value
End Set
End Property
Public Property EstModifier() As Boolean
Get
Return Me.zEstModifier
End Get
Set(ByVal value As Boolean)
Me.zEstModifier = value
End Set
End Property
Public Property EstNouveau() As Boolean
Get
Return Me.zEstNouveau
End Get
Set(ByVal value As Boolean)
Me.zEstNouveau = value
End Set
End Property
Public Property EstSupprimer() As Boolean
Get
Return Me.zEstSupprimer
End Get
Set(ByVal value As Boolean)
Me.zEstSupprimer = value
End Set
End Property
#End Region
#Region "--- Région Méthodes ---"
#Region "--- Région Constructeur ---"
''' <summary>
''' Constructeur par défaut
''' </summary>
''' <remarks></remarks>
Public Sub New()
End Sub
#End Region
#End Region
End Class
Deuxième projet
Deuxième classe (Modele_Criteres) - Les critères de requêtes
Public Class ModeleCriteres
#Region "--- Région Attributs ---"
' TODO - Remplacer les nom d'attributs par des noms significatifs
Private zBD100Id As String = String.Empty
Private zBD110Pseudo As String = String.Empty
Private zBD120Pass As String = String.Empty
Private zBD130Email As String = String.Empty
Private zBD140DtInscr As Date
Private zCheminBD As String = String.Empty
#End Region
#Region "--- Région Propriétés ---"
' TODO - Remplacer les nom de propriétés par des noms significatifs
Public Property id() As String
Get
Return Me.zBD100Id
End Get
Set(ByVal value As String)
Me.zBD100Id = value
End Set
End Property
Public Property pass() As String
Get
Return Me.zBD110Pseudo
End Get
Set(ByVal value As String)
Me.zBD110Pseudo = value
End Set
End Property
Public Property pseudo() As String
Get
Return Me.zBD120Pass
End Get
Set(ByVal value As String)
Me.zBD120Pass = value
End Set
End Property
Public Property email() As String
Get
Return Me.zBD130Email
End Get
Set(ByVal value As String)
Me.zBD130Email = value
End Set
End Property
Public Property Cinquieme() As Date
Get
Return Me.zBD140DtInscr
End Get
Set(ByVal value As Date)
Me.zBD140DtInscr = value
End Set
End Property
Public Property CheminBD() As String
Get
Return Me.zCheminBD
End Get
Set(ByVal value As String)
Me.zCheminBD = value
End Set
End Property
#End Region
#Region "--- Région Méthodes ---"
#Region "--- Région Constructeur ---"
Public Sub New(ByVal pChemin As String)
CheminBD = pChemin
End Sub
#End Region
#End Region
End Class
Deuxième projet
Troisième Classe (Modele_ListeTable) - Les listes fortements typés
''' <summary>
''' Classe de liste de la collection d'objets PC_config_Table
''' </summary>
''' <remarks></remarks>
Public Class ModeleListeTable
Inherits System.Collections.Generic.List(Of Modele_Entite.ModeleEntite)
End Class
Troisième projet - 3 Classes
Première classe - Les requêtes
#Region "--- Importations des classes externes ---"
Imports TYP_ENT = Modele_Entite.ModeleEntite
Imports TYP_CRI = Modele_Entite.ModeleCriteres
Imports TYP_COM = Modele_Commun.Modele_Communaute
#End Region
Public Class Modele_ReqSQL
#Region "--- Région Constantes SQL ---"
#Region "--- Région Requête SQL Insertion ---"
' TODO - Note la syntaxe peut changer selon le type de la BD
'INSERT INTO 'membre' ('id', 'pseudo', 'pass', 'email', 'date_inscription') VALUES
'(NULL, 'guillaume', '85ca51916e72aafad09b20409bbc43d538f4d791', 'guillaume.robier@hotmail.fr', 2012);
Public ReadOnly Property Insertion(ByVal pEnt As TYP_ENT) As String
Get
Dim ChaineSQL As New System.Text.StringBuilder
ChaineSQL.Append("INSERT INTO ")
ChaineSQL.Append(TYP_COM.BDNomTable)
ChaineSQL.Append(" (")
ChaineSQL.Append(TYP_COM.BD100Id)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD110Pseudo)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD120Pass)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD130Email)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD140DtInscr)
ChaineSQL.Append(") ")
ChaineSQL.Append(" VALUES (")
ChaineSQL.Append("'" & pEnt.id & "', ")
ChaineSQL.Append("'" & pEnt.pseudo & "', ")
ChaineSQL.Append("'" & pEnt.pass & "', ")
ChaineSQL.Append("'" & pEnt.email & "', ")
ChaineSQL.Append("'" & pEnt.date_inscription & "')")
Return ChaineSQL.ToString
End Get
End Property
#End Region
#Region "--- Région Requête SQL Sauvegarder ---"
Public ReadOnly Property Sauvegarder(ByVal pEnt As TYP_ENT) As String
Get
Dim ChaineSQL As New System.Text.StringBuilder
ChaineSQL.Append("UPDATE ")
Return ChaineSQL.ToString
End Get
End Property
#End Region
#Region "--- Région Requête SQL Supprimer ---"
Public ReadOnly Property Supprimer(ByVal pEnt As TYP_ENT) As String
Get
Dim ChaineSQL As New System.Text.StringBuilder
ChaineSQL.Append("DELETE ")
ChaineSQL.Append("FROM " & TYP_COM.BDNomTable)
ChaineSQL.Append(" WHERE ")
ChaineSQL.Append(TYP_COM.BD100Id & "=")
ChaineSQL.Append("""" & pEnt.id & """" & ";")
Return ChaineSQL.ToString
End Get
End Property
#End Region
#Region "--- Région Requête SQL Lecture ---"
' TODO - Note la syntaxe peut changer selon le type de la BD
Public ReadOnly Property Lecture(ByVal pCri As TYP_CRI) As String
Get
Dim ChaineSQL As New System.Text.StringBuilder
' TODO : A enlever après déboggage
pCri.id = String.Empty
If (String.IsNullOrEmpty(pCri.id)) Then
ChaineSQL.Append("SELECT ")
ChaineSQL.Append(TYP_COM.BD100Id)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD110Pseudo)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD120Pass)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD130Email)
ChaineSQL.Append(", ")
ChaineSQL.Append(TYP_COM.BD140DtInscr)
ChaineSQL.Append(" ")
ChaineSQL.Append(" FROM ")
ChaineSQL.Append(TYP_COM.BDNomTable)
ChaineSQL.Append(" ORDER BY ")
ChaineSQL.Append(TYP_COM.BD100Id)
Else
ChaineSQL = New System.Text.StringBuilder
End If
Return ChaineSQL.ToString
End Get
End Property
#End Region
#Region "--- Région Requête SQL Obtenir Numéro Suivant ---"
Public ReadOnly Property ObtenirNumeroUniqueSuivant() As String
Get
Dim ReqSQL As String = "SELECT MAX(" & TYP_COM.BD100Id & ")" & " FROM " & TYP_COM.BDNomTable & ";"
Return ReqSQL
End Get
End Property
#End Region
#End Region
End Class
Troisième projet - 3 Classes
Deuxième classe - L'exécution des requêtes
#Region "--- Importation des classes externes ---"
Imports System
Imports System.Data
Imports System.Data.DataRow
Imports MySql.Data.MySqlClient
Imports TYP_ENT = Modele_Entite.ModeleEntite
Imports TYP_COL = Modele_Entite.ModeleListeTable
Imports TYP_CRI = Modele_Entite.ModeleCriteres
Imports TYP_COM = Modele_Commun.Modele_Communaute
Imports TYP_SQL = Modele_Controleur.Modele_ReqSQL
#End Region
Public Class Modele_ExeSQL
#Region "--- Attributs ---"
Private zInstanceSQL As TYP_SQL
Private zConnexion As MySqlConnection
Private zCheminBD As String = String.Empty
Private zListeBD As New List(Of String)
Private zListeTables As New List(Of String)
#End Region
#Region "--- Propriétés ---"
Private Property InstanceSQL() As TYP_SQL
Get
Dim oldInst As TYP_SQL = Me.zInstanceSQL
If (oldInst Is Nothing) Then
oldInst = New TYP_SQL
End If
Return oldInst
End Get
Set(ByVal value As TYP_SQL)
Me.zInstanceSQL = value
End Set
End Property
Private Property CheminBD() As String
Get
Return Me.zCheminBD
End Get
Set(ByVal value As String)
Me.zCheminBD = value
End Set
End Property
''' <summary>
''' Instance unique de la classe
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Private Property Connexion() As MySqlConnection
Get
Try
If (Me.zConnexion Is Nothing) Then
zConnexion = New MySqlConnection
End If
Catch ex As Exception
End Try
Return Me.zConnexion
End Get
Set(ByVal value As MySqlConnection)
Me.zConnexion = value
End Set
End Property
Private Property ListeBD() As List(Of String)
Get
Return Me.zListeBD
End Get
Set(ByVal value As List(Of String))
Me.zListeBD = value
End Set
End Property
Private Property ListeTables() As List(Of String)
Get
Return Me.zListeTables
End Get
Set(ByVal value As List(Of String))
Me.zListeTables = value
End Set
End Property
#End Region
#Region "--- Méthodes ---"
#Region "--- Constructeurs ---"
Public Sub New(ByVal pChemin As String)
Dim StrTexte As New System.Text.StringBuilder
CheminBD = pChemin
Dim Chaine As String = String.Empty
Try
' Parametrage de la chaine de connection
Chaine = String.Format("server={0};user id={1}; password={2}; database=mysql; pooling=false", "localhost", "root", "kalissi")
Connexion = New MySqlConnection(Chaine)
Connexion.Open()
'GetDatabases()
'GetTablesListe()
'AfficheTable()
Catch ex As Exception
StrTexte.AppendLine("Erreur de connexion !")
StrTexte.AppendLine("Modele")
StrTexte.AppendLine("Constructeur : PC_config_ExeSQL")
StrTexte.AppendLine(ex.ToString)
MsgBox(StrTexte.ToString)
Finally
Chaine = String.Empty
End Try
End Sub
#End Region
#Region "--- Procédures ---"
Private Sub GetDatabases()
Dim reader As MySqlDataReader
reader = Nothing
Dim cmd As New MySqlCommand("SHOW DATABASES", Connexion)
Try
reader = cmd.ExecuteReader()
ListeBD.Clear()
While (reader.Read())
ListeBD.Add(reader.GetString(0))
End While
Catch ex As MySqlException
MsgBox("Failed to populate database list: " + ex.Message)
Finally
If Not reader Is Nothing Then reader.Close()
End Try
End Sub
Private Sub GetTablesListe()
Dim reader As MySqlDataReader
Connexion.ChangeDatabase(ListeBD.Item(1))
Dim cmd As New MySqlCommand("SHOW TABLES", Connexion)
Try
reader = cmd.ExecuteReader()
ListeTables.Clear()
While (reader.Read())
ListeTables.Add(reader.GetString(0))
End While
Catch ex As MySqlException
MsgBox("Failed to populate table list: " + ex.Message)
Finally
If Not reader Is Nothing Then reader.Close()
End Try
End Sub
Private Sub AfficheTable()
Dim NomTables As New System.Text.StringBuilder
For Each Nom As String In ListeTables
NomTables.AppendLine(Nom)
Next
MsgBox(NomTables.ToString)
End Sub
#End Region
#Region "--- Fonctions ---"
#Region "--- Région Fonctions de Suppression ---"
Public Function SupprimerEntite(ByVal pEnt As TYP_ENT) As TYP_ENT
Dim reqSQL As String = String.Empty
Dim Indice As Int32 = 0
Try
reqSQL = InstanceSQL.Supprimer(pEnt)
Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(reqSQL, Connexion)
cmd.CommandText = reqSQL
Indice = cmd.ExecuteNonQuery()
pEnt.EstModifier = False
pEnt.EstNouveau = False
pEnt.EstSupprimer = False
pEnt.id = String.Empty
Catch ex As Exception
pEnt = Nothing
Finally
Connexion.Close()
End Try
Return pEnt
End Function
#End Region
#Region "--- Région Fonctions de Lectures ---"
Public Function Lecture(ByVal pCritere As TYP_CRI) As TYP_COL
Debug.WriteLine("Entree - PC_config - Lecture")
Dim MonAdapteur As MySqlDataAdapter
Dim MonDataTable As DataTable
Dim MonDataSet As New DataSet
Dim DataRowLocal As DataRow
Dim MaCollection As New TYP_COL
Dim MonEntite As New TYP_ENT
Try
Dim reqSQL As String = InstanceSQL.Lecture(pCritere)
MonAdapteur = New MySqlDataAdapter(reqSQL, Connexion)
MonAdapteur.Fill(MonDataSet, "membres")
MonDataTable = MonDataSet.Tables("membres")
For Each DataRowLocal In MonDataTable.Rows
MonEntite = CreerInstance(DataRowLocal, pCritere.CheminBD)
MaCollection.Add(MonEntite)
Next
Catch ex As Exception
Debug.WriteLine("Erreur - PC_config - Lecture")
MaCollection = Nothing
Finally
Connexion.Clone()
Debug.WriteLine("Sortie - PC_config - Lecture")
End Try
Return MaCollection
End Function
#End Region
#Region "--- Région Fonctions de Modifications ---"
''' <summary>
''' Permet d'enregistrer une collection d'entités selon les critères fournis
''' </summary>
''' <param name="pEntite"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function InsererEntite(ByVal pEntite As TYP_ENT) As TYP_ENT
Debug.WriteLine("Entree - PC_Config - InserererEntite")
Dim reqSQL As String = String.Empty
Dim Indice As Int32 = 0
Dim Reponse As Boolean = False
Try
reqSQL = InstanceSQL.Insertion(pEntite)
Dim cmd As New MySqlCommand(reqSQL, Connexion)
cmd.CommandType = System.Data.CommandType.Text
cmd.CommandText = reqSQL
cmd.Connection = Connexion
Indice = cmd.ExecuteNonQuery()
pEntite.EstModifier = False
pEntite.EstNouveau = False
pEntite.EstSupprimer = False
Catch ex As Exception
Debug.WriteLine("Erreur - PC_config - InserererEntite")
pEntite = Nothing
Finally
Connexion.Close()
Debug.WriteLine("Sortie - PC_config - InserererEntite")
End Try
Return pEntite
End Function
Public Function SauvegarderEntite(ByVal pEnt As TYP_ENT) As TYP_ENT
Dim Flag As Boolean = False
Try
If (Flag) Then
pEnt = Nothing
End If
Catch ex As Exception
Finally
Connexion.Close()
End Try
Return pEnt
End Function
#End Region
#Region "--- Région Fonctions de Conversions ---"
Private Function CreerInstance(ByVal objet As DataRow, ByVal pChemin As String) As TYP_ENT
Debug.WriteLine("Entree - PC_config : CreerInstance")
Dim clientEntite As TYP_ENT = New TYP_ENT
Try
With clientEntite
If (objet.Item(TYP_COM.iCol_id_Ind1) IsNot Nothing) Then
.id = Convert.ToString(objet.Item(TYP_COM.iCol_id_Ind1))
End If
If (objet.Item(TYP_COM.iCol_pseudo_Ind2) IsNot Nothing) Then
.pseudo = Convert.ToString(objet.Item(TYP_COM.iCol_pseudo_Ind2))
End If
If (objet.Item(TYP_COM.iCol_pass_Ind3) IsNot Nothing) Then
.pass = Convert.ToString(objet.Item(TYP_COM.iCol_pass_Ind3))
End If
If (objet.Item(TYP_COM.iCol_email_Ind4) IsNot Nothing) Then
.email = Convert.ToString(objet.Item(TYP_COM.iCol_email_Ind4))
End If
If (objet.Item(TYP_COM.iCol_date_inscr_Ind5) IsNot Nothing) Then
.date_inscription = Convert.ToDateTime(objet.Item(TYP_COM.iCol_date_inscr_Ind5))
End If
End With
Catch ex As Exception
Debug.WriteLine("Erreur - PC_config : CreerInstance")
Finally
Debug.WriteLine("Sortie - PC_config : CreerInstance")
End Try
Return clientEntite
End Function
#End Region
#Region "--- Région Fonction Numero Suivant ---"
Public Function ObtenirNumeroSuivant(ByVal pChemin As String) As String
Debug.WriteLine("Entree - PC_config - ObtenirNumeroSuivant")
' Parametrage des objets de manipulation des données
Dim MonAdapteur As MySqlDataAdapter
Dim MonDataTable As DataTable = Nothing
Dim MonDataSet As New DataSet()
Dim DataRowLocal As DataRow
Dim MaCollection As New TYP_COL
Dim MonEntite As New TYP_ENT
Dim Compteur As String = String.Empty
Dim Numero As Int32 = 0
Try
Dim reqSQL As String = InstanceSQL.ObtenirNumeroUniqueSuivant
MonAdapteur = New MySqlDataAdapter(reqSQL, Connexion)
MonAdapteur.Fill(MonDataSet, "membres")
MonDataTable = MonDataSet.Tables("membres")
DataRowLocal = MonDataTable.Rows(0)
Dim Resultat As String = String.Empty
If (Not IsDBNull(DataRowLocal.Item(0))) Then
Compteur = CType(DataRowLocal.Item(0), String)
If Not (String.IsNullOrEmpty(Compteur)) Then
If ((Compteur < "100000") And (Compteur > "999999")) Then
Compteur = "100000"
End If
Else
Compteur = "100000"
End If
Else
Compteur = "100000"
End If
Int32.TryParse(Compteur, Numero)
Numero += 1
Compteur = Convert.ToString(Numero)
Catch ex As Exception
Debug.WriteLine("Erreur - PC_config - ObtenirNumeroSuivant")
Compteur = String.Empty
Finally
Debug.WriteLine("Sortie - PC_config - ObtenirNumeroSuivant")
Connexion.Close()
End Try
Return Compteur.ToString
End Function
#End Region
#End Region
#End Region
#Region "--- Commentaires ---"
#End Region
End Class
Troisième projet - 3 Classes
Troisième classe - Le controleur
#Region "--- Importation des classes externes ---"
Imports TYP_ENT = Modele_Entite.ModeleEntite
Imports TYP_EXE = Modele_Controleur.Modele_ExeSQL
Imports TYP_COL = Modele_Entite.ModeleListeTable
Imports TYP_COM = Modele_Commun.Modele_Communaute
Imports TYP_CRI = Modele_Entite.ModeleCriteres
#End Region
Public Class Modele_Control
#Region "--- Attributs ---"
Private zCheminBD As String = String.Empty
Private zInstance As TYP_EXE
#End Region
#Region "--- Propriétés ---"
Private Property CheminBD() As String
Get
Return Me.zCheminBD
End Get
Set(ByVal value As String)
Me.zCheminBD = value
End Set
End Property
Private Property InstanceEXE() As TYP_EXE
Get
Dim oldInst As TYP_EXE = Me.zInstance
If (oldInst Is Nothing) Then
oldInst = New TYP_EXE(CheminBD)
End If
Return oldInst
End Get
Set(ByVal value As TYP_EXE)
Me.zInstance = value
End Set
End Property
#End Region
#Region "--- Méthodes ---"
#Region "--- Constructeur ---"
Public Sub New(ByVal pChemin As String)
CheminBD = pChemin
End Sub
#End Region
#Region "--- Région Fonctions ---"
Public Function Lecture(ByVal pCrit As TYP_CRI) As TYP_COL
Dim Liste As TYP_COL = InstanceEXE.Lecture(pCrit)
Dim Indice As Int32 = 0
Dim Ent As TYP_ENT
If (Liste IsNot Nothing) Then
For Indice = 0 To Liste.Count - 1
Ent = Liste.Item(Indice)
Ent.EstModifier = False
Ent.EstNouveau = False
Ent.EstSupprimer = False
Ent = New TYP_ENT
Next
End If
Return Liste
End Function
Public Function MAJ_Table(ByVal LaCollection As TYP_COL, ByVal pChemin As String) As TYP_COL
Debug.WriteLine("Entree - PC_config : MAJ_Table.")
Dim Indice As Int32 = 0
Dim Ent As TYP_ENT
Dim Critere As New TYP_ENT
'Ajoutés et modifiés
For Indice = 0 To LaCollection.Count - 1
Ent = LaCollection.Item(Indice)
If (Ent.EstModifier) Then
Ent = InstanceEXE.SauvegarderEntite(Ent)
Else
If (Ent.EstNouveau) Then
Ent = InstanceEXE.InsererEntite(Ent)
Else
If (Ent.EstSupprimer) Then
Ent = InstanceEXE.SupprimerEntite(Ent)
End If
End If
End If
Next
Debug.WriteLine("Sortie - PC_config : MAJ_Table.")
Return LaCollection
End Function
Public Function ObtenirNumeroSuivant(ByVal pChemin As String) As String
Dim Numero As String = InstanceEXE.ObtenirNumeroSuivant(pChemin)
Return Numero
End Function
#End Region
#End Region
End Class
<code>
Dernier Projet - 2 Formes
Form Principal
<code>
#Region "--- Importations des classes externes ---"
Imports TYP_CTR = Modele_Controleur.Modele_Control
Imports TYP_COL = Modele_Entite.ModeleListeTable
Imports TYP_ENT = Modele_Entite.ModeleEntite
Imports TYP_CRI = Modele_Entite.ModeleCriteres
#End Region
''' <summary>
''' Gestionnaire de données
''' </summary>
''' <remarks></remarks>
Public Class PC_config_Form
#Region "--- Région Attributs ---"
Private Shadows zInstanceControleur As New TYP_CTR(CheminBD)
Private Shadows zEntiteLocale As TYP_ENT
Private Shadows zCollectionLocale As New TYP_COL
Private Shadows zCheminBD As String = String.Empty
Private Shadows zOffsetNewMembre As Int32 = 0
Private Shadows zIndiceModifier As Int32 = 0
#End Region
#Region "--- Région Propriétés ---"
Private Property InstanceCtrl() As TYP_CTR
Get
Return Me.zInstanceControleur
End Get
Set(ByVal value As TYP_CTR)
End Set
End Property
Private Property EntiteLocale() As TYP_ENT
Get
Return Me.zEntiteLocale
End Get
Set(ByVal value As TYP_ENT)
Me.zEntiteLocale = value
End Set
End Property
Private Property CollectionLocale() As TYP_COL
Get
Return Me.zCollectionLocale
End Get
Set(ByVal value As TYP_COL)
Me.zCollectionLocale = value
End Set
End Property
Private ReadOnly Property CheminBD() As String
Get
Dim Chaine As String = Application.ExecutablePath
Me.zCheminBD = Chaine.Substring(0, (Chaine.LastIndexOf("\") + 1))
Return Me.zCheminBD
End Get
End Property
Private Property OffSetNewMembre() As Int32
Get
Return Me.zOffsetNewMembre
End Get
Set(ByVal value As Int32)
Me.zOffsetNewMembre = value
End Set
End Property
Private Property IndiceModifier() As Int32
Get
Return Me.zIndiceModifier
End Get
Set(ByVal value As Int32)
Me.zIndiceModifier = value
End Set
End Property
#End Region
#Region "--- Région Méthodes ---"
#Region "--- Région Constructeur ---"
''' <summary>
''' Constructeur par défaut
''' </summary>
''' <remarks></remarks>
Public Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
InitialiseDataGridView()
End Sub
#End Region
#Region "--- Région Évènement ---"
#Region "--- Région Évènements Boutons ---"
Private Sub btn_ExecuteDemo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ExecuteDemo.Click
Me.Cursor = Cursors.WaitCursor
Dim EntX As TYP_ENT = NouvelleEntree()
CollectionLocale.Add(EntX)
MAJDonnees(CollectionLocale)
OffSetNewMembre = 0
AfficheCollection(CollectionLocale)
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Lecture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Lecture.Click
Me.Cursor = Cursors.WaitCursor
Lecture()
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Save.Click
Me.Cursor = Cursors.WaitCursor
MAJDonnees(CollectionLocale)
OffSetNewMembre = 0
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Modifier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Modifier.Click
Me.Cursor = Cursors.WaitCursor
Dim Indice As Int32 = 0
If (CollectionLocale IsNot Nothing) Then
If (CollectionLocale.Count > 0) Then
Dim EntY As TYP_ENT
Indice = Me.DGV_Donnees.CurrentRow.Index
EntY = CollectionLocale.Item(Indice)
IndiceModifier = Indice
Dim FenSec As New Modele_Edition(EntY)
FenSec.ShowDialog()
EntY = FenSec.EntiteLoc
FenSec.Dispose()
If (EntY IsNot Nothing) Then
EntY.EstModifier = True
CollectionLocale.Item(Indice) = EntY
AfficheCollection(CollectionLocale)
Me.DGV_Donnees.FirstDisplayedScrollingRowIndex = IndiceModifier
End If
End If
End If
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Inserer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Inserer.Click
Me.Cursor = Cursors.WaitCursor
Dim Indice As Int32 = 0
Dim EntY As New TYP_ENT
Indice = Me.DGV_Donnees.RowCount
EntY.id = ObtenirNumeroSuivant()
Dim FenSec As New Modele_Edition(EntY)
FenSec.ShowDialog()
EntY = FenSec.EntiteLoc
FenSec.Dispose()
If (EntY IsNot Nothing) Then
EntY.EstNouveau = True
CollectionLocale.Item(Indice) = EntY
AfficheCollection(CollectionLocale)
End If
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Supprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Supprimer.Click
Me.Cursor = Cursors.WaitCursor
If (CollectionLocale IsNot Nothing) Then
If (CollectionLocale.Count > 0) Then
Dim Indice As Int32 = Me.DGV_Donnees.CurrentRow.Index
Dim EntX As TYP_ENT = CollectionLocale.Item(Indice)
EntX.EstSupprimer = True
Dim Col_Tmp As New TYP_COL
Col_Tmp.Add(EntX)
Dim InstanceCtrl As New TYP_CTR(CheminBD)
Col_Tmp = InstanceCtrl.MAJ_Table(Col_Tmp, CheminBD)
EntX = Col_Tmp.Item(0)
If (String.IsNullOrEmpty(EntX.id)) Then
Lecture()
End If
End If
End If
Me.Cursor = Cursors.Default
End Sub
Private Sub btn_Quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Quitter.Click
Me.Close()
End Sub
#End Region
#End Region
#Region "--- Région Procédures ---"
Public Sub Lecture()
Dim ListeElements As New TYP_COL
Dim Critere As New TYP_CRI(CheminBD)
InitialiseDataGridView()
CollectionLocale = InstanceCtrl.Lecture(Critere)
If (CollectionLocale IsNot Nothing) Then
If (CollectionLocale.Count > 0) Then
AfficheCollection(CollectionLocale)
Else
MessageBox.Show("Aucune donnée", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Else
MessageBox.Show("Une erreur est survenue !", "Fatale", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Me.DGV_Donnees.Refresh()
End Sub
Public Sub MAJDonnees(ByVal pCol As TYP_COL)
Dim Ctrl As New TYP_CTR(CheminBD)
Dim Col_Tmp As TYP_COL = Ctrl.MAJ_Table(pCol, CheminBD)
Lecture()
If (CollectionLocale IsNot Nothing) Then
If (CollectionLocale.Count > 0) Then
AfficheCollection(CollectionLocale)
End If
End If
End Sub
Private Sub AfficheCollection(ByVal pCol As TYP_COL)
If (pCol IsNot Nothing) Then
If (pCol.Count > 0) Then
InitialiseDataGridView()
Dim Indice As Int32 = pCol.Count - 1
For Boucle As Int32 = 0 To Indice
Me.DGV_Donnees.Rows.Add()
Me.DGV_Donnees.Rows(Boucle).Cells(0).Value = pCol.Item(Boucle).id
Me.DGV_Donnees.Rows(Boucle).Cells(1).Value = pCol.Item(Boucle).pseudo
Me.DGV_Donnees.Rows(Boucle).Cells(2).Value = pCol.Item(Boucle).pass
Me.DGV_Donnees.Rows(Boucle).Cells(3).Value = pCol.Item(Boucle).email
Me.DGV_Donnees.Rows(Boucle).Cells(4).Value = pCol.Item(Boucle).date_inscription.ToShortDateString
Next
End If
End If
End Sub
Private Shadows Function InitialiseDataGridView() As Boolean
Me.DGV_Donnees.Rows.Clear()
'Permet de sélectionner toute une ligne
Me.DGV_Donnees.SelectionMode = DataGridViewSelectionMode.FullRowSelect
'Interdit la sélection de plusieurs projet
Me.DGV_Donnees.MultiSelect = False
Me.DGV_Donnees.ColumnCount = 8
Me.DGV_Donnees.Columns(0).HeaderText = "id"
Me.DGV_Donnees.Columns(0).Width = 100
Me.DGV_Donnees.Columns(1).HeaderText = "pseudo"
Me.DGV_Donnees.Columns(1).Width = 100
Me.DGV_Donnees.Columns(2).HeaderText = "pass"
Me.DGV_Donnees.Columns(2).Width = 100
Me.DGV_Donnees.Columns(3).HeaderText = "email"
Me.DGV_Donnees.Columns(3).Width = 100
Me.DGV_Donnees.Columns(4).HeaderText = "dt inscr"
Me.DGV_Donnees.Columns(4).Width = 100
Me.DGV_Donnees.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.DGV_Donnees.Columns(5).HeaderText = "est nouv"
Me.DGV_Donnees.Columns(5).Width = 50
Me.DGV_Donnees.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.DGV_Donnees.Columns(5).Visible = False
Me.DGV_Donnees.Columns(6).HeaderText = "est mod"
Me.DGV_Donnees.Columns(6).Width = 50
Me.DGV_Donnees.Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.DGV_Donnees.Columns(6).Visible = False
Me.DGV_Donnees.Columns(7).HeaderText = "est supp"
Me.DGV_Donnees.Columns(7).Width = 50
Me.DGV_Donnees.Columns(7).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.DGV_Donnees.Columns(7).Visible = False
Return True
End Function
#End Region
#Region "--- Région Fonctions ---"
Private Function NouvelleEntree() As TYP_ENT
Dim EntX As New TYP_ENT
EntX.id = ObtenirNumeroSuivant()
EntX.pseudo = "voyageur"
EntX.pass = "75cg56914e78abfkd59b60209cbc46d528f7d781"
EntX.email = "voyageur@hotmail.fr"
EntX.date_inscription = Date.Parse("2012-01-01")
EntX.EstNouveau = True
Return EntX
End Function
Private Function ObtenirNumeroSuivant() As String
Dim Numero As String = String.Empty
Dim InstanceCtrl As New TYP_CTR(CheminBD)
Numero = InstanceCtrl.ObtenirNumeroSuivant(CheminBD)
Dim Compteur As Int32 = Int32.Parse(Numero)
Compteur += OffSetNewMembre
OffSetNewMembre += 1
Numero = Compteur.ToString
Return Numero
End Function
#End Region
#End Region
End Class
Dernier Projet - 2 Formes
Form Secondaire
#Region "--- Importation des classes extrenes ---"
Imports TYP_ENT = Modele_Entite.ModeleEntite
#End Region
''' <summary>
'''
''' </summary>
''' <remarks></remarks>
Public Class Modele_Edition
#Region "--- Région Constantes ---"
#End Region
#Region "--- Région Attributs ---"
Private Shadows zEntiteLoc As TYP_ENT
#End Region
#Region "--- Région Propriétés ---"
Public Property EntiteLoc() As TYP_ENT
Get
Return Me.zEntiteLoc
End Get
Set(ByVal value As TYP_ENT)
Me.zEntiteLoc = value
End Set
End Property
#End Region
#Region "--- Région Méthodes ---"
#Region "--- Région Constructeurs ---"
Public Sub New(ByVal pEnt As TYP_ENT)
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
EntiteLoc = pEnt
End Sub
#End Region
#Region "--- Région Évènements ---"
#Region "--- Région Évènements Formulaire ---"
Private Sub PC_config_Edition_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AfficheEntite()
End Sub
#End Region
#Region "--- Région Évènements Boutons ---"
Private Sub btn_Annuler_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Annuler.Click
EntiteLoc = Nothing
Me.Close()
End Sub
Private Sub btn_MAJ_Entite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_MAJ_Entite.Click
RecupereEntite()
Me.Close()
End Sub
#End Region
#End Region
#Region "--- Région Procédures ---"
Private Sub RecupereEntite()
EntiteLoc.id = tbx_id.Text
EntiteLoc.pseudo = tbx_pseudo.Text
EntiteLoc.pass = tbx_pass.Text
EntiteLoc.email = tbx_courriel.Text
Dim LaDate As Date
If (Date.TryParse(tbx_dt_inscr.Text, LaDate)) Then
EntiteLoc.date_inscription = LaDate
End If
End Sub
Private Sub AfficheEntite()
Me.tbx_id.Text = EntiteLoc.id
Me.tbx_pseudo.Text = EntiteLoc.pseudo
Me.tbx_pass.Text = EntiteLoc.pass
Me.tbx_courriel.Text = EntiteLoc.email
If (EntiteLoc.date_inscription > Date.Parse("1950-01-01")) Then
Me.tbx_dt_inscr.Text = EntiteLoc.date_inscription.ToShortDateString
End If
End Sub
#End Region
#Region "--- Région Fonctions ---"
#End Region
#End Region
End Class
En résumé, une solution, 4 projets, 7 Classes, 2 Form.
En pratique, tu ne travaille jamais directement sur ta(es) grille(s),
tu travaille dans la(es) liste(s) fortement(s) typé(s), et tu affiche le contenu de la(es) liste(s) dans la(es) grille(s).
Regarde du côté des méthodes LinQ pour ordonné tes listes de façon à
faire concorder l'index de ta grille avec l'Index de la liste fortement typé.
Ainsi, tu ne récupère pas tes données de la grille mais bien de la liste fortement typé.
Voilà, je ne peux t'aider davantage, comme spécifié je ne code pas en CSharp,
mais j'ai déjà converti du CSharp en VB à l'aide de convertisseur sur la toile.
Et j'ai réalisé, que ma requète UPDATE n'est pas complète ...
K
Ilovedev
Messages postés
16
Date d'inscription
mardi 24 décembre 2013
Statut
Membre
Dernière intervention
22 janvier 2014
7 janv. 2014 à 14:24
7 janv. 2014 à 14:24
Merci beaucoup pour ton post je vais regarder tout ça et m'en inspirer... :o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Kalissi
Messages postés
218
Date d'inscription
jeudi 2 mai 2013
Statut
Membre
Dernière intervention
15 juillet 2019
20
7 janv. 2014 à 16:44
7 janv. 2014 à 16:44
re:
Prend note que j'ai produit ce modèle, il y a près d'un ans, et qu'aujourd'hui
j'utilise de plus en plus les méthodes LinQ, de plus certaines portions de réinitialisation ne sont pas optimiser.
Ici, Ent n'est pas réintroduit dans la liste, donc le code entre le If ... End If est
inutile.
Au lieu de l'instruction :
Ent = New TYP_ENT
On devrait avoir :
Liste.Item(Indice) = Ent
Lors de la lecture, ce sont les propriétés EstModifier, EstNouveau et EstSupprimer
qui doivent être initialisés à False.
K
Prend note que j'ai produit ce modèle, il y a près d'un ans, et qu'aujourd'hui
j'utilise de plus en plus les méthodes LinQ, de plus certaines portions de réinitialisation ne sont pas optimiser.
Public Function Lecture(ByVal pCrit As TYP_CRI) As TYP_COL
Dim Liste As TYP_COL = InstanceEXE.Lecture(pCrit)
Dim Indice As Int32 = 0
Dim Ent As TYP_ENT
If (Liste IsNot Nothing) Then
For Indice = 0 To Liste.Count - 1
Ent = Liste.Item(Indice)
Ent.EstModifier = False
Ent.EstNouveau = False
Ent.EstSupprimer = False
Ent = New TYP_ENT
Next
End If
Return Liste
End Function
Ici, Ent n'est pas réintroduit dans la liste, donc le code entre le If ... End If est
inutile.
Au lieu de l'instruction :
Ent = New TYP_ENT
On devrait avoir :
Liste.Item(Indice) = Ent
Lors de la lecture, ce sont les propriétés EstModifier, EstNouveau et EstSupprimer
qui doivent être initialisés à False.
K
Ilovedev
Messages postés
16
Date d'inscription
mardi 24 décembre 2013
Statut
Membre
Dernière intervention
22 janvier 2014
8 janv. 2014 à 08:52
8 janv. 2014 à 08:52
Encore merci pour ton aide...bonne journée :o)