Après avoir passé quelques jours à tenter de résoudre mon problème, la lecture de quelques tutoriel et de nombreux messages d'erreurs sur des forums, je n'ai pas réussi à trouver de solution, et je suis au point mort.
Voici en quelques mots ce que j'essaye de faire. Je réalise une application qui doit me permettre de programmer une microcontrôleur via un port série, et compléter une base de donnée Access afin de récupérer les différentes configuration rapidement.
Pour cela, j'ai donc mis en place une DataGridView pour visualiser les 4 première colonnes de ma base, et je cherche à ajouter d'autres colonnes, via un DataSet.
Mon DataSet se complète bien (je ne peux pas ajouter deux colonnes avec le même nom), mais impossible de compléter ma base de donnée.
De plus, lors de l'ajout de ma colonne, je perds la mise en place de mes DataGridViewComboBoxCell dans ma colonne qui me sert de configuration pour l'écriture des données.
Voici mon code, ou du moins une partie, avec la déclaration des du DataGridView générée par Visual Basic 2012, et le code pour la sauvegarde dans la base de données, le tout en VB.NET :
'DataGridView1
'
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.AllowUserToDeleteRows = False
Me.DataGridView1.AllowUserToResizeColumns = False
Me.DataGridView1.AllowUserToResizeRows = False
DataGridViewCellStyle1.BackColor = System.Drawing.Color.Yellow
DataGridViewCellStyle1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
DataGridViewCellStyle1.ForeColor = System.Drawing.Color.Black
DataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.YellowGreen
DataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Red
Me.DataGridView1.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1
Me.DataGridView1.AutoGenerateColumns = False
Me.DataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.[Single]
DataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
DataGridViewCellStyle2.BackColor = System.Drawing.Color.PowderBlue
DataGridViewCellStyle2.Font = New System.Drawing.Font("Arial", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
DataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText
DataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight
DataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText
DataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
Me.DataGridView1.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle2
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.Column4})
Me.DataGridView1.DataSource = Me.TableSocialeBindingSource
DataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
DataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window
DataGridViewCellStyle7.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
DataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText
DataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight
DataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText
DataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
Me.DataGridView1.DefaultCellStyle = DataGridViewCellStyle7
Me.DataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter
Me.DataGridView1.GridColor = System.Drawing.Color.Red
Me.DataGridView1.ImeMode = System.Windows.Forms.ImeMode.NoControl
Me.DataGridView1.Location = New System.Drawing.Point(29, 53)
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.[Single]
Me.DataGridView1.RowHeadersVisible = False
Me.DataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing
Me.DataGridView1.RowTemplate.Height = 20
Me.DataGridView1.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
Me.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect
Me.DataGridView1.Size = New System.Drawing.Size(1253, 625)
Me.DataGridView1.TabIndex = 19
'
'SocialeDataSet
'
Me.SocialeDataSet.DataSetName = "SocialeDataSet"
Me.SocialeDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema
'
'TableSocialeBindingSource
'
Me.TableSocialeBindingSource.DataMember = "TableSociale"
Me.TableSocialeBindingSource.DataSource = Me.SocialeDataSet
'
'TableSocialeTableAdapter
'
Me.TableSocialeTableAdapter.ClearBeforeFill = True
'
'Column1
'
Me.Column1.DataPropertyName = "N°"
DataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
DataGridViewCellStyle3.Format = "N0"
DataGridViewCellStyle3.NullValue = Nothing
Me.Column1.DefaultCellStyle = DataGridViewCellStyle3
Me.Column1.Frozen = True
Me.Column1.HeaderText = "N°"
Me.Column1.MaxInputLength = 2
Me.Column1.Name = "Column1"
Me.Column1.ReadOnly = True
Me.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
Me.Column1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
Me.Column1.Width = 50
'
'Column2
'
Me.Column2.DataPropertyName = "Paramètres"
DataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
Me.Column2.DefaultCellStyle = DataGridViewCellStyle4
Me.Column2.HeaderText = "Paramètres"
Me.Column2.MaxInputLength = 100
Me.Column2.Name = "Column2"
Me.Column2.ReadOnly = True
Me.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
Me.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
Me.Column2.Width = 500
'
'Column3
'
Me.Column3.DataPropertyName = "Lecture"
DataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
Me.Column3.DefaultCellStyle = DataGridViewCellStyle5
Me.Column3.HeaderText = "Lecture"
Me.Column3.MaxInputLength = 100
Me.Column3.Name = "Column3"
Me.Column3.ReadOnly = True
Me.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
Me.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
Me.Column3.Width = 350
'
'Column4
'
Me.Column4.DataPropertyName = "Ecriture"
DataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
Me.Column4.DefaultCellStyle = DataGridViewCellStyle6
Me.Column4.HeaderText = "Ecriture"
Me.Column4.MaxInputLength = 100
Me.Column4.Name = "Column4"
Me.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.[False]
Me.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
Me.Column4.Width = 350
'
Dim Index1 As New DataGridViewComboBoxCell()
Dim Index2 As New DataGridViewComboBoxCell()
Dim Index3 As New DataGridViewComboBoxCell()
Dim Index5 As New DataGridViewComboBoxCell()
Dim Index9 As New DataGridViewComboBoxCell()
Dim Index10 As New DataGridViewComboBoxCell()
Dim Index11 As New DataGridViewComboBoxCell()
Dim Index13 As New DataGridViewComboBoxCell()
Dim Index25 As New DataGridViewComboBoxCell()
Dim connectionString As String "Provider Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\Sociale.mdb; Persist Security Info = False;"
Dim sql As String = "SELECT * FROM TableSociale" '* pour sélectionner toute la table
Dim connection As New OleDbConnection(connectionString)
Dim dataadapter As New OleDbDataAdapter(sql, connection)
Dim i As Byte
Dim dsNewChamp As DataColumn
Dim myRow As DataRow
Dim Client As String
Dim ComBuilder As OleDbCommandBuilder
'Dim ds As New DataSet("TableSociale")
'Dim TableSociale As DataTable = New DataTable("TableSociale")
Private Sub Sociale_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TableAdapter.Fill(SocialeDataSet.TableSociale)
'connection.Open()
'dataadapter.Fill(SocialeDataSet, "TableSociale")
'connection.Close()
'DataGridView1.DataSource = SocialeDataSet
'DataGridView1.DataMember = "TableSociale"
Index1.Items.AddRange("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
DataGridView1.Item(3, 0) = Index1
Index2.Items.Add("RTC")
Index2.Items.Add("GSM")
Index2.Items.Add("RTC principal / GSM secours")
DataGridView1.Item(3, 1) = Index2
Index3.Items.AddRange("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
DataGridView1.Item(3, 2) = Index3
Index5.Items.Add("Télésurveilleur")
Index5.Items.Add("Vocal")
DataGridView1.Item(3, 4) = Index5
Index9.Items.Add("STRATEL")
Index9.Items.Add("Contact ID")
DataGridView1.Item(3, 8) = Index9
Index10.Items.Add("Validée")
Index10.Items.Add("Inhibée")
DataGridView1.Item(3, 9) = Index10
Index11.Items.AddRange("10", "45", "60", "90", "120", "Inhibé")
DataGridView1.Item(3, 10) = Index11
Index13.Items.AddRange("5h", "12h", "24h", "48h", "1 semaine")
DataGridView1.Item(3, 12) = Index13
Index25.Items.AddRange("1", "2", "3", "4", "5", "6", "7", "8", "9")
DataGridView1.Item(3, 24) = Index25
End Sub
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
Private Sub txtEdition_KeyPress(ByVal sender As Object, ByVal e As
Private Sub Parametrage_Click(sender As Object, e As EventArgs) Handles Parametrage.Click
Private Sub Upload_Click(sender As Object, e As EventArgs) Handles Upload.Click
Private Sub Download_Click(sender As Object, e As EventArgs) Handles Download.Click
Function CalculCrcSum(CRC As Byte, Val As Byte) As Integer
Private Sub Transfert_Click(sender As Object, e As EventArgs) Handles Transfert.Click
Private Sub Save_Click(sender As Object, e As EventArgs) Handles Save.Click
Private Sub Base_Click(sender As Object, e As EventArgs) Handles Base.Click
Client = InputBox("Nom du nouveau client :" & vbCrLf, "Ajout d'une nouvelle sauvegarde")
' Créer un nouveau DataColumn, lui donner un DataType, un nom, divers valeurs pour ses propriétés
'et l'ajouter à la DataTable.
dsNewChamp = New DataColumn()
dsNewChamp.DefaultValue = False
dsNewChamp.DataType = System.Type.GetType("System.String") 'Type de la colonne
'dsNewChamp = SocialeDataSet.TableSociale.Columns("Ecriture")
dsNewChamp.ColumnName = Client 'Nom de la colonne
dsNewChamp.ReadOnly = False 'Colonne ReadOnly
dsNewChamp.Unique = False 'Evite les doublons
dsNewChamp.AutoIncrement = False
dsNewChamp.AllowDBNull = True
Try
SocialeDataSet.TableSociale.Columns.Add(dsNewChamp)
'MsgBox("Client ajouté avec succès", MsgBoxStyle.Information, "Ajout")
Catch ex As DuplicateNameException
MessageBox.Show("Nom déjà utilisé.")
Exit Sub
End Try
For i = 0 To 24
myRow = SocialeDataSet.TableSociale.Rows(i)
myRow(Client) = SocialeDataSet.TableSociale.Item(i).Ecriture
Next
SocialeDataSet.TableSociale.AcceptChanges()
TableAdapter.Update(SocialeDataSet.TableSociale)
'ComBuilder = New OleDbCommandBuilder(dataadapter)
'dataadapter.UpdateCommand = ComBuilder.GetUpdateCommand()
'dataadapter.Update(SocialeDataSet.TableSociale)
'Try
' TableSocialeTableAdapter.Fill(SocialeDataSet.TableSociale)
'Catch ez As Data.ConstraintException
' Dim strWriter As StreamWriter = ...\ExtractErr.log")
' Dim v_errorRows As DataRow() = SocialeDataSet.TableSociale.GetErrors
' For Each v_row As DataRow In v_errorRows
' strWriter.WriteLine(v_row.RowError)
' Next
' strWriter.Flush()
' strWriter.Close()
'End Try
'Dim cmd As New OleDbCommand
'Dim ssql As String = "INSERT INTO Client FROM TableSociale VALUES (Ecriture FROM TableSociale)"
'cmd.CommandType = CommandType.Text
'cmd.CommandText = ssql
'cmd.Connection = connection
'cmd.ExecuteNonQuery()
End Sub
End Class
Une idée sur la disparition de mes DataGridViewComboBoxCell ?
Comment mettre à jour ma base de données après l'ajout de ma colonne ?
En vous remerciant de l'aide que vous pourriez m'apporter.
PS : en espérant ne pas m'être trompé de forum ce coup ci...