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
Bon avec ce code mes modifs sont bien enregistrés, je peux ajouter/supprimer/modifier des lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Ensuit voici le code de mon ajout de colonne (qui ne fct pas!)
J'ai essayer de batir une commande UPDATE, sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 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
Partager