Delete avec Paramètre / Oracle Database

cs_Sabine25 Messages postés 84 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 22 juin 2007 - 28 mars 2007 à 17:16
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 - 29 mars 2007 à 02:45
Bonjour,
Voila j ai créé une checkbox en 5ième colonne d'un DataGrid View, et je veux que quand 1 ou plusieurs lignes sont cochées , supprimer la ou les lignes en cliquant sur un bouton!
de plus j aimerai une mise à jour instantanée de mon datagrid view!

voici mon code:

private

void button2_Click(
object sender,
EventArgs e)
{
            
foreach(
DataGridViewRow row
in dataGridView1.Rows)
            {
                     
DataGridViewCheckBoxCell cell = (
DataGridViewCheckBoxCell)row.Cells[4];   
                     
if (cell.Value==cell.TrueValue)
                     {
                                 
// connection to MPL database
                                 DataConnection m =
new
DataConnection();
                                 
OracleConnection conn =
null;
                                 conn = m.DoConnection();
                                 
OracleCommand cmd = conn.CreateCommand();
                                 
OracleCommand cmd2 = conn.CreateCommand();
                                 cmd.CommandText =
"DELETE FROM user_mpl where login=:parm1 and password=:parm2";
                                 
cmd2.CommandText =
"COMMIT";

                                 OracleParameter myParameter1 =
new
OracleParameter(
":parm1",
OracleType.VarChar,30);
                                 myParameter1.Value = row.Cells[0].Value;
                                 
OracleParameter myParameter2 =
new
OracleParameter(
":parm2",
OracleType.VarChar, 30);
                                 myParameter2.Value = row.Cells[1].Value;

                                 cmd.Parameters.Add(myParameter1);
                                 cmd.Parameters.Add(myParameter2);
                                 cmd.ExecuteNonQuery();
                                 cmd2.ExecuteNonQuery();
                                 cmd.Dispose();
                                 cmd =

null;
                                 cmd2.Dispose();
                                 cmd2 =
null;
                                 conn = m.DoDeconnection();
                     } 
               }

dataGridView1.Update();
}

Dans ce code j ai une erreur ORA qui me dit : "not variable bound"
je pense que ca vient de "myParameter2.Value = row.Cells[1].Value;"

Merci pour votre aide,

Sabine

4 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
28 mars 2007 à 18:17
Salut,

En fait, il faut que cell.TrueValue soit définit... Pour le moment il est a null.
Donc plutot de faire comme ca (et je suis bien conscient que c'est de ma faute :p), autant vérifier si cell.value n'est pas null (donc chéckée).

Remplace ton if par if (cell.value != null), et normalement le reste du code fonctionne !

Par contre, évite de faire ta connexion/deconnexion dans le foreach... Et n'oublies pas le try/catch/finally pour la gestion des erreurs et la fermeture de la connexion !

Mx
MVP C# 
0
cs_Sabine25 Messages postés 84 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 22 juin 2007
28 mars 2007 à 20:23
Ok super, ca marche mieux, enfin ca marche!
merciiiii beaucoup
Sabine
0
cs_Sabine25 Messages postés 84 Date d'inscription jeudi 1 mars 2007 Statut Membre Dernière intervention 22 juin 2007
28 mars 2007 à 22:40
Pour ce qui concerne la mise à jour automatique du datagridview, tu as oublié de me répondre!
j 'ai essayé "dataGridView1.Update(); " et "
dataGridView1.Refresh(); " dans le try , dans le finally mais ca marche pas!!!

je me demande si il ne faut pas que je "clear " les lignes du datagrid et apres que je les "reload", non???
mais je vois pas les methodes à utiliser!

j ai l impression que ce qui correpond le mieux c est le refresh!!! peut etre faut il que je le fasse dans la boucle foreach pour chaue ligne qui sont chécké!

Je sais pas je sais plus, pourrais tu m 'éclairer?

merci
Sabine
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
29 mars 2007 à 02:45
Bonjour Sabine25
le mieux pour la mise à jour d'un datagridview c'est encore de le faire par soit même en code (enfin il me semble)- parce que j'ai remarqué que même lorsque l'on a le control (datagridview) lié à un bindingsource par exemple il arrive qu'il faille cliquer sur la cellule pour que l'affichage de la valeur se modifie
un petit lien >
http://romagny13.over-blog.com/article-5832925.html
http://romagny13.over-blog.com/article-5833106.html
certes cela parait peut etre au premier abord plus compliqué mais en fait il en est rien et l'on devient plus maitre du control, enfin personnellement je trouves, d'ailleurs pour preuve je n'ai même pas besoin de mettre un try catch, jamais je n'ai eu la moindre erreur à catcher comme cela :)
++
0
Rejoignez-nous