IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modification des données d'une table dans DataGridView avec combobox dans le controls


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut Modification des données d'une table dans DataGridView avec combobox dans le controls
    Bonjour,
    J'ai une table SqlServer qui est renseignée chaque semaine, pour chaque salarié et pour chaque affaire, avec une liste de Produits utilisés avec les quantités, prix unitaires etc.... Vu le nombre de lignes à traiter/modifier et le nombre de colonnes je cherche à pouvoir directement saisir dans le DataGridView pour mettre à jour cette table. J'ai parcouru le site de Microsoft et j'ai trouvé mon bonheur pour les champs de type "TextBox" pour la saisie des quantités par exemple. Et voilà où cela se gâte pour moi:
    Les affaires, et produits sont à sélectionner dans un "ComboBox" pour pouvoir être modifés. De plus, les colonnes liées (Prix des produits) devront se mettre à jour en fonction du choix de l'utilisateur. J'ai donc deux problèmes:
    1- Je souhaiterais savoir comment remonter ma table dans le controls qui contient des Combobox qui contiennent la liste voulue et une données qui pointe sur le bonne index
    2- Comment lier le champs Prix au champ combobox à modifier.

    Si quelqu'un avait une piste de départ, ce serait sympa

    Merci d'avance

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Bonjour

    Vu la maigrichonne description donnée par tes soins (pas de code ) et de ce que j'ai cru comprendre voici un code exemple avec le composant DataGridViewComboBoxCell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    Public Class Form1
        Private salaries As DataTable
        Private produits As DataTable
        Private affaires As DataTable
        Private ds As DataSet
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            salaries = TableSalaries()
            produits = TableProduits()
            affaires = TableAffaires()
            ds = New DataSet("DS Salaries")
            ds.Tables.Add(salaries)
            'BindingSource1.DataSource = ds
            'BindingSource1.DataMember = ds.Tables("Salarie").TableName
     
            dgv.DataSource = salaries
     
            txtIdSalarie.DataBindings.Add("Text", salaries, "Id", True, DataSourceUpdateMode.OnPropertyChanged)
            txtNomSalarie.DataBindings.Add("Text", salaries, "Nom", True, DataSourceUpdateMode.OnPropertyChanged)
            txtQuantiteSalarie.DataBindings.Add("Text", salaries, "Quantite", True, DataSourceUpdateMode.OnPropertyChanged)
     
            'en lecture seule car colonne est calculée .voir ci-apres definition table Salaries
            txtTotalVente.ReadOnly = True
            txtTotalVente.DataBindings.Add("Text", salaries, "TotalVente", True, DataSourceUpdateMode.OnPropertyChanged)
     
     
        End Sub
     
        Private Function TableSalaries() As DataTable
            Dim dt As New DataTable("Salarie")
            dt.Columns.Add(
                New DataColumn With {.Caption = "Id", .DataType = GetType(Integer), .ColumnName = "Id"})
            dt.Columns.Add(
              New DataColumn With {.Caption = "Nom", .DataType = GetType(String), .ColumnName = "Nom"})
            dt.Columns.Add(
              New DataColumn With {.Caption = "Affaire", .DataType = GetType(String), .ColumnName = "Affaire"})
     
            dt.Columns.Add(
             New DataColumn With {.Caption = "Quantite", .DataType = GetType(Integer), .ColumnName = "Quantite"})
     
            dt.Columns.Add(
             New DataColumn With {.Caption = "Produit", .DataType = GetType(Decimal), .ColumnName = "PrixProduit"})
     
            'cette colonne  sera calculée: Quantite x PrixProduit
            dt.Columns.Add(
                        New DataColumn With {.Caption = "Total", .DataType = GetType(Decimal), .ColumnName = "TotalVente"})
            Return dt
        End Function
        Private Function TableProduits() As DataTable
            Dim dt As New DataTable("Produit")
            dt.Columns.Add(
                New DataColumn With {.Caption = "Id", .DataType = GetType(Integer), .ColumnName = "IdProduit"})
            dt.Columns.Add(
                New DataColumn With {.Caption = "Nom", .DataType = GetType(String), .ColumnName = "NomProduit"})
            dt.Columns.Add(
              New DataColumn With {.Caption = "Prix", .DataType = GetType(Decimal), .ColumnName = "PrixProduit"})
            'fill table
            Dim dr As DataRow = dt.NewRow
            dt.Rows.Add("101", "produit1", 100.25)
            dt.Rows.Add("102", "produit2", 125.5)
            dt.Rows.Add("103", "produit3", 200.55)
            Return dt
        End Function
        Private Function TableAffaires() As DataTable
            Dim dt As New DataTable("Affaire")
            dt.Columns.Add(
                     New DataColumn With {.Caption = "Id", .DataType = GetType(Integer), .ColumnName = "IdAffaire"})
            dt.Columns.Add(
              New DataColumn With {.Caption = "Affaire", .DataType = GetType(String), .ColumnName = "NomAffaire"})
     
            'fill table
     
            dt.Rows.Add("5001", "Affaire1")
            dt.Rows.Add("5002", "Affaire2")
            dt.Rows.Add("5003", "Affaire3")
            dt.Rows.Add("5004", "Affaire4")
            dt.Rows.Add("5005", "Affaire5")
            Return dt
     
        End Function
     
     
     
        Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
     
     
        End Sub
     
        Private Sub dgv_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellClick
            If (e.ColumnIndex > -1) Then
                'Bind grid cell with combobox and than bind combobox with datasource.  
                Dim cboAffaires As New DataGridViewComboBoxCell()
                Dim cboProduits As New DataGridViewComboBoxCell()
     
                ' Check the column  cell, in which it click.  
                If (dgv.Columns(e.ColumnIndex).Name.Contains("Affaire")) Then
     
                    ' On click of datagridview cell, attched combobox with this click cell of datagridview  
                    dgv(e.ColumnIndex, e.RowIndex) = cboAffaires
                    cboAffaires.DataSource = TableAffaires() ' Bind combobox with datasource.  
                    cboAffaires.DisplayMember = "NomAffaire"
                    cboAffaires.ValueMember = "NomAffaire"
     
                End If
     
                If (dgv.Columns(e.ColumnIndex).Name.Contains("Produit")) Then
     
                    dgv(e.ColumnIndex, e.RowIndex) = cboProduits
                    cboProduits.DataSource = TableProduits()
                    cboProduits.DisplayMember = "NomProduit"
                    cboProduits.ValueMember = "PrixProduit"
     
                End If
                'maj de la colonne TotalVente (calcul)
                If (dgv.Columns(e.ColumnIndex).Name.Contains("TotalVente")) Then
     
                    dgv.Rows(e.RowIndex).Cells("TotalVente").Value =
                       CType(dgv.Rows(e.RowIndex).Cells("Quantite").Value, Decimal) * CType(dgv.Rows(e.RowIndex).Cells("PrixProduit").Value, Decimal)
     
                End If
     
            End If
        End Sub
    End Class
    bon code...

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/07/2006, 22h46
  2. Réponses: 2
    Dernier message: 18/05/2006, 16h28
  3. recopi des données d'une table dans une autre
    Par moicats dans le forum Access
    Réponses: 5
    Dernier message: 06/04/2006, 22h12
  4. Réponses: 2
    Dernier message: 21/03/2006, 16h22
  5. concatenation des données d'une table dans une autre
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/10/2004, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo