Ajout d'une colonne sur un DataGridView et enregistrement dans la table respective
Bon lundi à tous!
J'utilise un DataGridView (DGV) pour afficher une table qui est dans ma base de donnée SQL CompactEdition. Je réussi à bien afficher ma table, entrée de nouvelles données et les sauvegarder.
Par contre, mon problème se situe au niveau de l'ajout de colonne. J'ai créer dans ma form un bouton "Ajouter Colonne". J'aimerais, lorsqu'appuyer, que l'utilisateur entre le nom de la colonne ainsi que son type (Bool, String, Integer, etc.). Je réussi à ajouter la colonne mais j'ai l'impression qu'elle ne s'ajoute que sur le DGV et non dans la table source et lorsque j'enregistre, ferme la fenêtre et l'ouvre à nouveau, la nouvelle colonne n'apparaît pas!
Voici le code d'enregistrement
Pour info:
- Tableau = form sur laquelle le DGV est...
- Tableau.DA = DataAdaptatater
- Tableau.DataSet1 = Dataset pour la table
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Public Shared Function EnregistrerTable(ByVal nom_table As String)
Dim flag As Boolean = False
connection.Close()
connection.Open()
Try
Dim objetCB = New SqlServerCe.SqlCeCommandBuilder(Tableau.DA)
Tableau.DA.Update(Tableau.DataSet1, nom_table)
Tableau.DataSet1.Clear()
Tableau.DA.Fill(Tableau.DataSet1, nom_table)
connection.Close()
flag = True
Catch ex As Exception
MsgBox("Erreur SQL (2002): " + ex.Message.ToString, MsgBoxStyle.Exclamation, "Erreur")
End Try
Return flag
End Function |
Bon avec ce code mes modifs sont bien enregistrés, je peux ajouter/supprimer/modifier des lignes.
Ensuit voici le code de mon ajout de colonne (qui ne fct pas!)
Code:
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
| Public Shared Sub AjouterColonne(ByVal nom_table As String)
Dim nom_col As String = ""
Dim data_type As String = "String"
Dim new_col As DataColumn
'Dim DAstring As String = "UPDATE " + nom_table
'Type de colonne string par défaut
type_colonne = 2
'Tant que le nom de la colonne n'a pas été entré, on boucle
While nom_col = ""
nom_col = InputBox("Nom de la colonne à ajouter?", "Nommer colonne").ToString
End While
Dim flag As Boolean = False
'Je vérifie pour ne pas ajouter une colonne avec un nom existant
For i = 0 To Tableau.DataGridView1.Columns.Count - 1
If Tableau.DataGridView1.Columns(i).Name.ToLower = nom_col.ToLower Then
flag = True
Exit For
End If
Next
If flag = False Then 'Si le nom est disponible
'Ouverture de la form qui demande le choix (style checkbox)
ChoixType.ShowDialog()
'Choix restraint selon ces 5 types, d'où le SELECT CASE
Select Case type_colonne
Case 1
data_type = "Boolean"
Case 2
data_type = "String"
Case 3
data_type = "Double"
Case 4
data_type = "Int32"
Case 5
data_type = "DateTime"
End Select
'Je crée l'objet DataColumn avec sont type
new_col = New DataColumn(nom_col)
new_col.DataType = Type.GetType("System." + data_type)
'C'est ici que je suis pas du tout sûr de moi...héhé
'J'insère la colonne dans le dataset
Tableau.DataSet1.Tables(nom_table).Columns.Add(new_col)
Tableau.DataSet1.AcceptChanges()
'J'update la table à l'aide du DA et d'une commande SQL "UPDATE"
Tableau.DA.UpdateCommand = New SqlServerCe.SqlCeCommandBuilder(Tableau.DA).GetUpdateCommand
Tableau.DA.Update(Tableau.DataSet1, nom_table)
'un autre essai infructueux
'Tableau.DA.UpdateCommand = New SqlServerCe.SqlCeCommand(DAstring, connection)
'Tableau.DA.Fill(Tableau.DataSet1, nom_table)
'Je refresh le DGV avec ce qui serait la nouvelle table (+1 colonne)
'Par contre ici ce qui se passe c'est que la colonne reste dans le DGV, mais
'si j'avais modifier des valeurs avant d'enregistrer, les valeurs disparaissent.
'si je ferme la form, ma colonne est perdu complètement.
Tableau.DataGridView1.Refresh()
Else
MsgBox("(" + nom_col.ToUpper + ")" + " existe déjà!", MsgBoxStyle.Critical, "Ajout annulé...")
End If
End Sub |
J'ai essayer de batir une commande UPDATE, sans succès.
J'ai essayer avec le code ci-haut, sans succès.
Ma théorie est que je dois updater le Dataset et ensuite utiliser le DA pour faire l'update de la dataset vers la table source, mais de toute évidence je fais une erreur quelque part.
Quelqu'un a une idée?
Merci d'Avance...
JP