Bonjour,
J'ai un datagridview (dtgv) qui est définie:
dtgv.Datasource = maDataTable
où maDataTable correspond au résultat d'une requête comportant plusieurs tables.
Deja, je n'ai pas réussi à faire une mise à jour de la base de données lorsqu'une cellule est modifiée.
Pourtant ma connexion se fait ainsi:
Pour faire la mise à jour, je met dans l'événement "CellEndEdit" de mon dtgr :
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 OracleConnection connexion = new OracleConnection(OraDb); OracleCommand command = new OracleCommand(); command.Connection = connexion; command.CommandText = "Select T_ID.Id, T_ID.Lib_Id, T_USR.Lib_Usr FROM T_ID, T_USR WHERE T_ID.Id = T_USR.IdUsr Order by T_ID.Id" command.CommandType = CommandType.Text; OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; OracleCommandBuilder builder = new OracleCommandBuilder(adapter); DataSet dataset = new DataSet(); adapter.Fill(dataset, "TABLE"); DataTable table = dataset.Tables["TABLE"];
Ceci ne marche pas car, j'ai lu quelque part, qu'on ne pouvait pas le faire s'il y avait plusieurs tables dans la requete? Pouvez vous me confirmer ou me donner une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 table.Columns["Id"].Unique = true; DataRow dr = drv.Row; DataRow row = Dt.Rows[e.RowIndex]; row["Lib_Id"] = dr["Lib_Id"]; adapter.Update(dataset, "TABLE");
Moi, du coup j'ai recréé un Datatable avec juste la table T_ID et ca marche mais ca m'oblige à recharger les données!
Deuxièmement, le dtgv est en "AllowUserToAddRows=true", donc toujours dans l'événement "CellEndEdit", je fais un insert classique via les commandes:
Les mises à jour ou insert en base fonctionnent ainsi, même si je trouve que c'est pas très beau!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3command.CommandText = "INSERT INTO T_ID VALUES (99, \"test\")" command.ExecuteNonQuery
Enfin, le problème réel vient du fait qu'à la fin de cette procédure, je souhaite rafraichir le dtgv, donc je fais : dtgv.Columns.Clear();
et la, ca plante : L'opération n'est pas valide, car elle se traduit par un appel réentrant à la fonction SetCurrentCellAddressCore.
Ca fait 1 journée que je cherche, et ne comprend pas!
Merci de m'aider.
Partager