Encore des problèmes !! (tranfert de datagrid vers form)

Signaler
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
19 mai 2004
-
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
19 mai 2004
-
OK, me revoilà !! :big)

Après m'être connectée à une base, je récupère une valeur dans mon datagrid et je la place dans une zone de texte. Jusqu'ici, tout va (à peu près) bien.
Je me retrouve avec TextBox1.text = "bellay (du)";

Mais je souhaite, sur changement de ma zone de texte, aller chercher une autre donnée dans ma base en rapport avec celle que je viens de trouver. Dans mon exemple, il s'agit de trouver le quartier correspondant à la rue (ici, bellay (du) ).

Le problème qui se pose est que, au lieu de me renvoyer le nom que je cherche, on me renvoie "Table". C'est plutôt gênant... Le nom de rue est bien écrit cette fois-ci ;)
Voilà mon code, je vois pas ce qui fait planter le tout, peut-être parce que je ne ferme pas mes connections, ou parce que je choisis le mauvais indice ? TextBox 2 est, au fait, l'endroit où je souhaite afficher mon quartier (de la même manière qu'avec la rue).

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
string connStr = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\basepatrimoinearbore\\baseaccess.mdb";

string selStr ="SELECT DISTINCT quartier_nom FROM rue WHERE rue_nom LIKE ""+this.textBox1.Text+""";

MessageBox.Show(selStr); //pour test
OleDbDataAdapter adapt= new OleDbDataAdapter (selStr,connStr);
System.Data.DataSet ds= new System.Data.DataSet();

try 
{
  adapt.Fill(ds); 
  MessageBox.Show(ds.Tables[0].ToString()); 
  // ici on me renvoie Table
  
  this.textBox2.Text = ds.Tables[0].ToString();
}
catch (System.Data.OleDb.OleDbException mon_erreur) 
{
  MessageBox.Show(mon_erreur.Message);
}


des frites !

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Il faut que tu fasses référence au champs concerné de la table, et non pas à la table.
J'ai jamais bossé avec des datasets mais ca devrait donner qqchose comme ça :

 this.textBox2.Text = ds.Tables[0].Rows["TonChamps"].ToString();
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
19 mai 2004

non ça ne fonctionne pas... enfin pas vraiment mieux !
J'obtiens "System.Data.DataRow" à la place de "Table".
Le raisonnement a pourtant l'air de tenir la route... :sad)

des frites !
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Ce bout de code marchera (normalement), mais on doit pouvoir faire mieux

foreach(DataRow dr in ds.Tables["rue "].Rows)
textBox2.Text = dr["quartier_nom"].toString();


J'espere que je t'embrouilles pas :big)
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
19 mai 2004

J'ai dû oublié quelque chose, parce que j'ai une erreur à l'exécution quand j'éxécute ton code ("la référence d'un objet n'est pas définie à une instance d'un objet.")...

des frites !
Messages postés
56
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
14 novembre 2007

ds : c'est le dataset
ds.Tables[0] : c'est la première table
ds.Tables[0].Rows[0] : c'est le 1er row de la 1ere table
ds.Tables[0].Rows[0]["Nom Colonne"] : c'est la valeur de la colonne "Nom Colonne" de ton 1er row de ta 1ere table
PS: il faut caster les valeurs obtenues qui par défaut sont des objets.
Dans ton exemple :
this.textBox2.Text = (string)ds.Tables[0].Rows[0]["quartier_nom"];
Messages postés
24
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
19 mai 2004

ok génial ça marche !!! 8-) En plus j'ai compris maintenant !
Merci !!!!!!!!!!!!!!!!!!

des frites !