cs_jeanmarc1234
Messages postés11Date d'inscriptionsamedi 25 novembre 2006StatutMembreDernière intervention 9 décembre 2008
-
25 nov. 2006 à 19:01
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 2009
-
1 déc. 2006 à 19:13
bonjour,
nouveau en VB 2005 et sur ce forum, j'ai une question concernant le datagridview.
je crée un petit logiciel de gestion de compte, grace à un combobox je sélectionne le nom du compte. puis un bindingsource et un datagridview sont créés. le souci c'est que mon datagridview me mets les données en doublon lorsque je reclique sur le combobox, j'ai tenté les la méthode clear sur le datagridview et le bindingsource mais rien à faire. à l'aide..
voici le code de mon controle utilisateur.
Imports System.Data.SqlClient
Imports System.Data
Public Class CONSCOMPTE
Dim MyConnection As SqlConnection
Dim MyAdapter As SqlDataAdapter
Dim Mybindingsource As BindingSource
Dim Table As String
Dim MyDatagridview As DataGridView
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
MyConnection = New SqlConnection
MyConnection.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DONNEES.mdf;Integrated Security=True;User Instance=True"
Table = "COMPTE" & ComboBox1.Text
Dim SelectTable As String = "SELECT * FROM " & Table & ""
MyAdapter = New SqlDataAdapter(SelectTable, MyConnection)
Dim SelectDataSet As String = "DONNEESDataSet." & Table
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(MyAdapter)
Mybindingsource.AddNew()
MyDatagridview.Rows.Item(Mybindingsource.Position).Cells.Item(0).Value = " "
MyDatagridview.Rows.Item(Mybindingsource.Position).Cells.Item(1).Value = "Solde du compte"
MyDatagridview.Rows.Item(Mybindingsource.Position).Cells.Item(2).Value = " "
MyDatagridview.Rows.Item(Mybindingsource.Position).Cells.Item(3).Value = " "
MyDatagridview.Rows.Item(Mybindingsource.Position).Cells.Item(4).Value = "0"
End If
Me.TabControl1.Visible = True
Catch
MsgBox("Connexion impossible")
End Try
End Sub
Private Sub CONSCOMPTE_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
If Me.Visible = True Then
Me.LOCATAIRESTableAdapter.Fill(Me.DONNEESDataSet.LOCATAIRES)
Me.OPERATIONSTableAdapter.Fill(Me.DONNEESDataSet.OPERATIONS)
End If
End Sub
Private Sub CANCEL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CANCEL.Click
Try
LOCATAIRESBindingSource.CancelEdit()
Mybindingsource.CancelEdit()
MyDatagridview.CancelEdit()
Me.Controls.Remove(MyDatagridview)
Catch
MsgBox("Connexion impossible")
End Try
Me.Visible = False
End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
Mybindingsource.EndEdit()
MyAdapter.Update(DONNEESDataSet, Table)
MsgBox(MyDatagridview.RowCount)
MsgBox(Mybindingsource.Count)
MyDatagridview.Rows.Clear()
MsgBox(MyDatagridview.RowCount)
Mybindingsource.Clear()
MsgBox(Mybindingsource.Count)
Me.Controls.Remove(MyDatagridview)
Me.Visible = False
End Sub
Private Sub Nouveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nouveau.Click
Nouveau.Visible = False
Modifier.Visible = False
DateTimePicker1.Visible = True
ComboBox2.Visible = True
TextBox2.Visible = True
Saisir.Visible = True
Annuler.Visible = True
End Sub
Private Sub Annuler_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Annuler.Click
Nouveau.Visible = True
Modifier.Visible = True
DateTimePicker1.Visible = False
ComboBox2.Visible = False
TextBox2.Visible = False
Saisir.Visible = False
Annuler.Visible = False
End Sub
Private Sub Saisir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Saisir.Click
Dim index As Integer
Mybindingsource.AddNew()
index = Mybindingsource.Position
cs_jeanmarc1234
Messages postés11Date d'inscriptionsamedi 25 novembre 2006StatutMembreDernière intervention 9 décembre 2008 1 déc. 2006 à 15:33
Bonjour !!
Je viens de trouver la soluce à mon problème, je charge mes donnees dans un datatable que je recrée à chaque sélection dans le combobox ! voici le code pour ce que ça pourras interresser.
Et encore merci pour Tout TMONOD !!
Sub Connect()MyConnection New SqlConnectionMyConnection.ConnectionString
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 25 nov. 2006 à 19:45
Bonsoir,
Si tu separais un peu ton interface de la gestion des données nous y verions un peu plus clair !
- Classe MaConnection avec une methode connect, ajouter , ....
- Eventuellement une classe ou une structure pour représenter un enregistrement
Détermine plutôt tous les etats possibles de ton form et fait une methode qui met les controles dans la position que tu veux selon cet etat (à lancer dans Nouveau_Click()...)
public Enum EtatDeMonForm
Vide
Nouveau
Modif
end Enum
et une petite sub qui fait le boulot :
public sub MAJAffichage(etat as EtatDeMonForm)
...
End Sub
cs_jeanmarc1234
Messages postés11Date d'inscriptionsamedi 25 novembre 2006StatutMembreDernière intervention 9 décembre 2008 27 nov. 2006 à 17:21
salut TMONOD !
j'essai de suivre ton conseil mais je t'avoue que j'ai un peu du mal avec la méthode Plubic Enum EtatdeMonform.
Si cela ne te dérange pas trop pourrais tu un peu me guider pour sa création ?
cs_jeanmarc1234
Messages postés11Date d'inscriptionsamedi 25 novembre 2006StatutMembreDernière intervention 9 décembre 2008 29 nov. 2006 à 20:07
Bonjour !
Donc voilà je pense que mon code est maintenant un peu plus clair (grace à TMONOD !!), et j'en reviens donc à mon premier problème mon datagridview ne peut pas m'afficher plusieurs tables(que je sélectionne dans un combobox), il m'affiche la première table selectionnée, et lorsque je la reselctionne dans le combobox il me réaffiche à chaque fois les données à la suite des autres (les memes, genre copier coller) !
Donc si quelqu'un aurait une petite indication à me donner çà serait trés sympa !
Merci d'avance
Voici le code mise à jour :
Public
Class CONSCOMPTE
Dim MyConnection As SqlConnection
Dim MyAdapter As SqlDataAdapter
Dim Mybindingsource As BindingSource
Dim Table As
String
Dim MyDatagridview As DataGridView
Public Ctrletat As EtatDeMonControl
Enum EtatDeMonControl
NouveauDebit
SaisirDebit
AnnulerDebit
NouveauCredit
SaisirCredit
AnnulerCredit
End
Enum
Sub
MiseAJourAffichage()
Select
Case Ctrletat
Case
EtatDeMonControl.NouveauDebit
Nouveau.Visible =
False
Modifier.Visible =
False
DateTimePicker1.Visible =
True
ComboBox2.Visible =
True
TextBox2.Visible =
True
Saisir.Visible =
True
Annuler.Visible =
True
Case
EtatDeMonControl.SaisirDebit
Nouveau.Visible =
True
Modifier.Visible =
True
DateTimePicker1.Visible =
False
ComboBox2.Visible =
False
TextBox2.Visible =
False
Saisir.Visible =
False
Annuler.Visible =
False
Case
EtatDeMonControl.AnnulerDebit
Nouveau.Visible =
True
Modifier.Visible =
True
DateTimePicker1.Visible =
False
ComboBox2.Visible =
False
TextBox2.Visible =
False
Saisir.Visible =
False
Annuler.Visible =
False
Case
EtatDeMonControl.NouveauCredit
Nouveau1.Visible =
False
Modifier1.Visible =
False
DateTimePicker2.Visible =
True
ComboBox3.Visible =
True
TextBox4.Visible =
True
Saisir1.Visible =
True
Annuler1.Visible =
True
Case
Is = EtatDeMonControl.SaisirCredit
Nouveau1.Visible =
True
Modifier1.Visible =
True
DateTimePicker2.Visible =
False
ComboBox3.Visible =
False
TextBox4.Visible =
False
Saisir1.Visible =
False
Annuler1.Visible =
False
Case
EtatDeMonControl.AnnulerCredit
Nouveau1.Visible =
True
Modifier1.Visible =
True
DateTimePicker2.Visible =
False
ComboBox3.Visible =
False
TextBox4.Visible =
False
Saisir1.Visible =
False
Annuler1.Visible =
False
End
Select
End
Sub
Sub
Connect()
MyConnection = New SqlConnection
MyConnection.ConnectionString =
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DONNEES.mdf;Integrated Security=True;User Instance=True"
Table = "COMPTE" & ComboBox1.Text
Dim SelectTable AsString = "SELECT * FROM " & Table &
""
MyAdapter = New SqlDataAdapter(SelectTable, MyConnection)
Dim SelectDataSet AsString = "DONNEESDataSet." & Table
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(MyAdapter)
Mybindingsource = New BindingSource
MyConnection.Open()
MyAdapter.Fill(DONNEESDataSet, Table)
MyConnection.Close()
Mybindingsource.DataSource = DONNEESDataSet
Mybindingsource.DataMember = Table
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 30 nov. 2006 à 13:56
Salut,
Bravo pour le nettoyage !
Pourquoi ne pas faire un "bind" des contrôles de ta fiche avec ta source directement ?, ca te permettrait de ne plus avoir à écrire
des MyDatagridview.Rows.Item(index).Cells.Item(0).Value = DateTimePicker1 ....
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 1 déc. 2006 à 19:13
Salut,
Content que tu aies trouvé par toi même, d'autant plus qu'il m'était difficile de reproduire ton projet sur ma machine.
Attention à ton catch, il faut qu'il catche quelque chôse, (ex as exception au pire),
or comme tu n'as mis dans ton catch que des appels à des methodes, c'est dans ces methodes qu'il faut faire ton try...catch !
Sinon bravo, content d'avoir fait (un peu) ta connaissance.