Meilleur auteur de réponses
datagridview avec boutonn vb

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
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...
- Modifié Cyrille Précetti dimanche 3 juillet 2016 13:29 spelling
- Marqué comme réponse SIMONGEORGES dimanche 3 juillet 2016 21:12
-
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
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...
- Modifié Cyrille Précetti dimanche 3 juillet 2016 13:29 spelling
- Marqué comme réponse SIMONGEORGES dimanche 3 juillet 2016 21:12
-
-
-
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
-