Pb datagrid et base de donnees [Résolu]

Signaler
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008
-
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008
-
Bonjour a tous.

J'ai dans mon appli un datagrid qui m'affiche les tables de ma bases de donnees (le choix de la table a afficher se fait par un combobox). Jusque la tout va bien.(grace a certains membres de ce site qui m'ont bien aidee).
Je voudrais pouvoir ajouter (a l'aide de textBox et d'un bouton) et supprimer des enregistrements mais je rencontre 2 problemes :

1) j'arrive a inserer des elements dans une table mais pas dans 2 tables a la fois.

string apid = textBox1.Text;
string apname = textBox2.Text;
string query = "insert into AP(AP_ID,AP_name) VALUES('" + apid.Replace("'","''") + "','" + apname.Replace("'","''") + "')";
OleDbDataAdapter myAdapter = new OleDbDataAdapter( query, myConnection );
DataSet APData = new DataSet();
myAdapter.Fill( APData );
myConnection.Close();
J'essaie de faire une 2eme requete mais rien a faire.

2) comment faire pour supprimer un enregistrement d'une table en selectionnant la ligne correspondante dans le datagrid puis en cliquant sur mon bouton supprimer.
Un paramettre important a prendre en compte : je debute avec le c# et j'ai vraiment du mal avec les bases de donnees.

Je vous remercie d'avance pour toutes vos suggestions.
Kakol

10 réponses

Messages postés
130
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2008

Salut kakol,

Je ne connais pas la commande c# pour travailler avec tes datagrid. Cependant tu pourrais essayer de rajouter un champ appele "number" par exemple qui serait une clef primaire de type auto increment qui te permettra de pointer les elements de ton datagrid de la facon suivante :
string cellvalue1=this.dataGrid1[iRownr,0].ToString();
string cellvalue2=this.dataGrid1[iRownr,1].ToString();
string cellvalue3=this.dataGrid1[iRownr,2].ToString();
string query = "UPDATE ta-table set AP_ID='" + cellvalue2.Replace("'","''") + "',AP_name='" + cellvalue3.Replace("'","''") + "' where number = " + cellvalue1.Replace("'","''") + "";

Bon c'est un peu triche mais je pense que ca peut marcher.
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Salut
Pour supprimer, voilà la requete:
"Delete from AP where Ap_id = xx"

NB:1) pour ton code,je pense qu'utiliser un oledbcommand sera mieux qu'un dataset
2)ton prog peut subir des "Sql injection", mieux vaut utiliser les paramètres

Bonne chance

YaoYao !!
1 + 1 = 10
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Salut Fildomen.
Oui pour le oledbcommand je vais me renseigner.
Par contre pour la requete supprimer mon probleme c'est justement ce que je doit mettre a la place du xx dans "Delete from AP where Ap_id = xx".
En effet, je doit recuperer l'info du datagrid quand je selectionne la ligne a supprimer.
Je pense qu'il doit y avoir une commande du style dataGrid1.CurrentRowIndex (celle la c'est pour le numero de la ligne selctionnee), mais pour avoir les infos des champs de la ligne selectionnee.

merci.

*** Kakol ***
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

mwi, il ya un tableau des items selectionnés, mais vu que tu va selectionner qu'un item, il sera le premier dans le tableau, alors, le xxx = Convert.ToInt32( listview1.SelectedItems[0].Text)
si tt les items sont affichés dans la lsite, et par ordre, fé xxx =listview1.SelectedItems[0].Index

je suis la pour t'aider si qlq chose marcherait pas

Bonne chance

YaoYao !!
1 + 1 = 10
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

ah, pour celle la , Convert.ToInt32( listview1.SelectedItems[0].Text) , c seulement si t'as les ID affichés dans la première colonne, sinon, fé Convert.ToInt32( listview1.SelectedItems[0].SubItems[y].Text) ou y = la colonne -2, par ex, la deuxième colonne,c y = 0, pcke les subitems, sont les colonnes ajoutées a celle de gauche, la principale

YaoYao !!
1 + 1 = 10
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Salut.
Merci beaucoup de m'avoir repondu.
J'ai resolu mon probleme en faisant :
int iRownr=this.dataGrid1.CurrentCell.RowNumber;
int iColnr=this.dataGrid1.CurrentCell.ColumnNumber;
string cellvalue=this.dataGrid1[iRownr,iColnr].ToString();
cela me permet de recuperer la valeur de la cellule que j'ai selectionnee dans mon datagrid.
Par contre maintenant j'aurais besoin du nom du champ de la colonne correspondant a cette cellule dans la base de donnees. Je ne sais pas si c'est bien comprehensible donc voila un exemple.
Ma table a cette tete :
AP_ID AP_name (nom des champs de la table)
123 truc
456 machin
Donc dans le datagrid quand par exemple je clique sur la case machin je voudrais recuperer le texte AP_name.
As-tu une idee?

*** Kakol ***
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

hmmm, je koné pas une commande sql qui fait ca, mais si c toi qui a fé la base, tu les connais déjà alors

YaoYao !!
1 + 1 = 10
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Je me suis peut etre mal exprimee mais c'est pas une commande sql qu'il me faut mais des commandes en c#. En fait c'est pour pouvoir mettre a jour la base de donnees a partir de l'appli. Dans mon exemple l'utilisateur doit pouvoir par exemple changer "machin" en "bidule" en le modifiant dans le datagrid puis en cliquant sur un bouton Update.
Mais bon si j'y arrive pas je pense que je vais reflechir sur une autre maniere de faire.

*** Kakol ***
Messages postés
180
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2008

Oui ca marche et en effet je pense que ca peut etre une solution si jamais je n'ai pas besoin des infos que je voulais recuperer, par la suite.
Merci a vous deux.

*** Kakol ***