none
datagridview avec boutonn vb RRS feed

  • Question

  • bonjour j'avance doucement avec mon projet

    j’ai réussi la couleur et le texte de mes boutons mais j’ai fait un code pour effectuer des calculs en click sur chaque boutons mais cela se passe pas bien voici mon code et la copie  d’écran qui peut m’aider pour que quand je click sur un bouton je puisse effectuer un calcul précis. mon code effectue des calculs répétitif sur la ligne courante  et je voudrais juste un calcul précis

    Public Class Form1
        Dim valeurchoisie As Object, choix As Integer
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    
    
            DataGridView1.RowCount = 8
            DataGridView1.ColumnCount = 5
            DataGridView1.Columns(0).Name = "produit"
            DataGridView1.Columns(1).Name = "quantité"
            DataGridView1.Columns(2).Name = "energiet"
            DataGridView1.Columns(3).Name = "glucides"
            DataGridView1.Columns(4).Name = "sucres"
    
            Dim calculs As New DataGridViewButtonColumn()
            calculs.Name = "calculs"
    
            DataGridView1.Columns.Add(calculs)
            DataGridView1.Rows(0).Cells("calculs").Value = "Calcul Energie"
            calculs.FlatStyle = FlatStyle.Flat
            Me.DataGridView1.Rows(0).Cells("calculs").Style.BackColor = Color.Red
    
            DataGridView1.Rows(1).Cells("calculs").Value = "Calcul glucides"
            calculs.FlatStyle = FlatStyle.Flat
            Me.DataGridView1.Rows(1).Cells("calculs").Style.BackColor = Color.Aqua
    
            DataGridView1.Rows(2).Cells("calculs").Value = "Calcul Dont sucres"
            calculs.FlatStyle = FlatStyle.Flat
            Me.DataGridView1.Rows(2).Cells("calculs").Style.BackColor = Color.Fuchsia
    
            'Dim choix As Integer = Me.DataGridView1.CurrentCellAddress.Y
            'MsgBox("choix")
    
    
        End Sub
    
        Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            'Dim choix As Object = Me.DataGridView1.CurrentRow
            Dim quantite_energie As Double = (Val(Me.DataGridView1.CurrentRow.Cells.Item(1).Value) * Val(Me.DataGridView1.CurrentRow.Cells.Item(2).Value)) / 1000
    
            MessageBox.Show("quantité réeelle énergie =" & quantite_energie)
            'MsgBox("un autre calcul", MsgBoxStyle.YesNo)
    
    
    
            Dim quantite_glucides As Double = (Val(Me.DataGridView1.CurrentRow.Cells.Item(1).Value) * Val(Me.DataGridView1.CurrentRow.Cells.Item(3).Value)) / 1000
    
            MessageBox.Show("quantité réeelle glucides =" & quantite_glucides)
            'MsgBox("un autre calcul", MsgBoxStyle.YesNo)
    
        End Sub
    end class

    un grand merci

    dimanche 3 juillet 2016 08:53

Réponses

  • Est-ce que vous voulez dire que vous voudriez avoir le choix d'un des calculs pour chaque ligne?

    Je recommande que vous n'utilisiez donc pas un bouton qui a un usage fixe, mais plutôt un combobox pour donner le choix du calcul.

    Comme ceci:

    et le code a modifier pour votre appli:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    
    
            DataGridView1.RowCount = 8
            DataGridView1.ColumnCount = 5
            DataGridView1.Columns(0).Name = "produit"
            DataGridView1.Columns(1).Name = "quantité"
            DataGridView1.Columns(2).Name = "energiet"
            DataGridView1.Columns(3).Name = "glucides"
            DataGridView1.Columns(4).Name = "sucres"
    
            'Dim calculs As New DataGridViewButtonColumn()
            'calculs.Name = "calculs"
            'calculs.FlatStyle = FlatStyle.Flat
            'calculs.Text = "Calcul Energie"
    
    
            'DataGridView1.Columns.Add(calculs)
            'DataGridView1.Rows(0).Cells("calculs").Value = "calcul energie"
            'DataGridView1.Rows(0).Cells("calculs").Style.BackColor = Color.Red
    
            Dim ChoixOperation As New DataGridViewComboBoxColumn
            ChoixOperation.Name = "ChoixOperation"
            ChoixOperation.Items.Add("Sans Calcul")
            ChoixOperation.Items.Add("Calcul Energie")
            ChoixOperation.Items.Add("Calcul Glucide")
            ChoixOperation.Items.Add("Autre Calcul")
            DataGridView1.Columns.Add(ChoixOperation)
            DataGridView1.Rows(0).Cells("ChoixOperation").Value = ChoixOperation.Items(0)
        End Sub
    
        Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
            ' Seulement pour la column contenant le combobox ColumnIndex 5.
            If DataGridView1.CurrentCell.ColumnIndex = 5 Then
                Dim combo As ComboBox = CType(e.Control, ComboBox)
                If (combo IsNot Nothing) Then
                    ' On enlève le event-handler pour ne pas en rajouter si le combo est utilisé plusieurs fois.
                    RemoveHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
    
                    ' On ajoute le event handler. 
                    AddHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
                End If
            End If
        End Sub
    
        Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim combo As ComboBox = CType(sender, ComboBox)
    
            Select Case combo.SelectedItem
                Case "Calcul Energie"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Energie"
                Case "Calcul Glucide"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Glucide"
                Case "Autre Calcul"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Autre Calcul"
                Case "Sans Calcul"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Sans Calcul"
            End Select
    
        End Sub

    C'est un peu compliqué pour des calculs qui  ne doivent pas être très complexes.Vous pouvez les faire sans soucis et afficher les résultats dans un autre tableau...


    dimanche 3 juillet 2016 13:28
  • Lors du traitement du calcul vous pouvez utiliser le combo.SelectedItem:

    Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim combo As ComboBox = CType(sender, ComboBox)
    
            Select Case combo.SelectedItem
                Case "Calcul Energie"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Energie"
                Case "Calcul Glucide"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Glucide"
                Case "Autre Calcul"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Autre Calcul"
                Case "Sans Calcul"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Sans Calcul"
            End Select
            combo.SelectedItem = combo.Items(0)
    
        End Sub

    Mais c'est déroutant pour l'utilisateur qui voit un résultat sans savoir ce qui a été fait...

    • Marqué comme réponse SIMONGEORGES lundi 4 juillet 2016 09:15
    lundi 4 juillet 2016 09:01

Toutes les réponses

  • Est-ce que vous voulez dire que vous voudriez avoir le choix d'un des calculs pour chaque ligne?

    Je recommande que vous n'utilisiez donc pas un bouton qui a un usage fixe, mais plutôt un combobox pour donner le choix du calcul.

    Comme ceci:

    et le code a modifier pour votre appli:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    
    
            DataGridView1.RowCount = 8
            DataGridView1.ColumnCount = 5
            DataGridView1.Columns(0).Name = "produit"
            DataGridView1.Columns(1).Name = "quantité"
            DataGridView1.Columns(2).Name = "energiet"
            DataGridView1.Columns(3).Name = "glucides"
            DataGridView1.Columns(4).Name = "sucres"
    
            'Dim calculs As New DataGridViewButtonColumn()
            'calculs.Name = "calculs"
            'calculs.FlatStyle = FlatStyle.Flat
            'calculs.Text = "Calcul Energie"
    
    
            'DataGridView1.Columns.Add(calculs)
            'DataGridView1.Rows(0).Cells("calculs").Value = "calcul energie"
            'DataGridView1.Rows(0).Cells("calculs").Style.BackColor = Color.Red
    
            Dim ChoixOperation As New DataGridViewComboBoxColumn
            ChoixOperation.Name = "ChoixOperation"
            ChoixOperation.Items.Add("Sans Calcul")
            ChoixOperation.Items.Add("Calcul Energie")
            ChoixOperation.Items.Add("Calcul Glucide")
            ChoixOperation.Items.Add("Autre Calcul")
            DataGridView1.Columns.Add(ChoixOperation)
            DataGridView1.Rows(0).Cells("ChoixOperation").Value = ChoixOperation.Items(0)
        End Sub
    
        Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
            ' Seulement pour la column contenant le combobox ColumnIndex 5.
            If DataGridView1.CurrentCell.ColumnIndex = 5 Then
                Dim combo As ComboBox = CType(e.Control, ComboBox)
                If (combo IsNot Nothing) Then
                    ' On enlève le event-handler pour ne pas en rajouter si le combo est utilisé plusieurs fois.
                    RemoveHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
    
                    ' On ajoute le event handler. 
                    AddHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
                End If
            End If
        End Sub
    
        Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim combo As ComboBox = CType(sender, ComboBox)
    
            Select Case combo.SelectedItem
                Case "Calcul Energie"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Energie"
                Case "Calcul Glucide"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Glucide"
                Case "Autre Calcul"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Autre Calcul"
                Case "Sans Calcul"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Sans Calcul"
            End Select
    
        End Sub

    C'est un peu compliqué pour des calculs qui  ne doivent pas être très complexes.Vous pouvez les faire sans soucis et afficher les résultats dans un autre tableau...


    dimanche 3 juillet 2016 13:28
  • un tres grand merci je connaissais le fait de mettre un combobox ce qui simplifie tout
    dimanche 3 juillet 2016 21:12
  • bonjour super ca marche super bien

    j'ai réussi a faire les calculs

    par contre je n’ai pas réussi a la fin de mon calcul à changer l'item du combox pour revenir à " sans calcul"

     j’aurais besoin d'aide merci d'avance

    lundi 4 juillet 2016 08:27
  • Lors du traitement du calcul vous pouvez utiliser le combo.SelectedItem:

    Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim combo As ComboBox = CType(sender, ComboBox)
    
            Select Case combo.SelectedItem
                Case "Calcul Energie"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Energie"
                Case "Calcul Glucide"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Calcul Glucide"
                Case "Autre Calcul"
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Autre Calcul"
                Case "Sans Calcul"
                    'Pour debug on affiche l'ordre de calcul
                    DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value = "Sans Calcul"
            End Select
            combo.SelectedItem = combo.Items(0)
    
        End Sub

    Mais c'est déroutant pour l'utilisateur qui voit un résultat sans savoir ce qui a été fait...

    • Marqué comme réponse SIMONGEORGES lundi 4 juillet 2016 09:15
    lundi 4 juillet 2016 09:01
  • encore un grand merci c'était si simple je continu sur mon deveolppement

    merci de tou coeur

    lundi 4 juillet 2016 09:15