Je souhaite que dans cb_selectfoire s'affiche les années de FOIRE et que cb_selectsalon s'affiche la liste des salons (des_salon) en fonction de l'année de la foire, MAIS aussi un "Tout afficher".
dans dgv_afficher_part_inscrit il doit y avoir la liste des participants par salon selectionner dans cb_selectsalon, ou tous si "Tout afficher" est selectionné.
voici mon code : dans sqlFoire.cs
/ FONCTION FOIRE
public static dsFoire getFoire()
{
dsFoire ds = new dsFoire();
try
{
dsFoireTableAdapters.ta_foire dtMesFoires = new foire_de_vienne.dsFoireTableAdapters.ta_foire();
dtMesFoires.FillFoire(ds.dt_foire);
}
catch (DbException)
{
ds = null;
}
return ds;
}
//chargement de la combobox cb_selectfoire
dsFoire myDsFoire2 = foire_de_vienne.sqlFoire.getFoire();
cb_selectfoire.DataSource = myDsFoire2.dt_foire;
cb_selectfoire.DisplayMember = "annee";
private void FormMenu_Load(object sender, EventArgs e)
{
int year = Convert.ToInt32(cb_selectfoire.SelectedItem);
//requete à exécuter string requete "SELECT id_salon FROM SALON WHERE annee"+ year;
//création de la connection
OdbcConnection connection = new OdbcConnection();
//chaine de connection (du type "DSN=monDSN)
string chaineDeConnection = "Dsn=dsn_foire_de_vienne;database=foire_de_vienne;option=0;port=0;server=localhost;uid=root";
//affectation de la chaine de connection à la connection
connection.ConnectionString = chaineDeConnection;
//ouverture de la connection
connection.Open();
//création du DataSet
DataSet data = new DataSet();
//création du OdbcDataAdapter
OdbcDataAdapter adapter = new OdbcDataAdapter(requete, connection);
//remplissage du DataSet avec les résultats de la requête
adapter.Fill(data);
//on déclare maTable comme étant la première table du DataSet (celle qui nous interesse)
DataTable maTable = data.Tables[0];
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 févr. 2009 à 14:54
Salut.
Je suis très perplexe quant à "
cb_selectsalon.Text += row[0] + "\r\n";
". Je ne sais pas si ça fonctionne, mais dans tous les cas, il me semble bien plus efficace et plus simple d'utiliser "
cb_selectsalon.Items.Add(row[0]);
".
Et si tu veux un champ "Tout afficher", tu insère tout simplement un champ du même nom avant les autres : "
cb_selectsalon.Items.Add("Tout afficher");
" puis, sur le
SelectedIndexChanged
de ta combobox, tu regardes juste si "
cb_selectsalon.SelectedIndex == 0
" ou pas. Si c'est le cas, tu fais ta requête sur tout, sinon tu la fais sur "
cb_selectsalon.SelectedValue as string
".
cs_bacio
Messages postés13Date d'inscriptionlundi 25 décembre 2000StatutMembreDernière intervention19 février 2009 16 févr. 2009 à 15:35
merci pour ton message en effet tu as raison je penses que c'est bien mieux, malheureusement maintenant j'ai droit a un "Unknown column 'System.Data.DataRowView' in 'where clause'" sur la ligne "adapter.Fill(data);" pourtant ma requète est juste :O
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 févr. 2009 à 16:01
Une erreur sur un adapter.Fill() vient d'une erreur dans la requête (car c'est à ce moment qu'elle est exécutée).
Cette erreur indique 2 choses (La première sûre, la deuxième, ça dépend) :
- "System.Data.DataRowView" => Quand on fait un .ToString() sur un object qui n'a pas de valeur simple, il renvoie le type d'objet dont il s'agit. C'est ce qu'il semble s'être passé dans ton cas. Tu as peut-être oublié un .Value, un .Text ou encore un [0]. (Je ne peux pas vraiment te dire, je ne connais vraiment pas la classe DataRowView.
ET
- "Unknown column" => MySQL a considéré ton texte comme un nom de colone et non un string tout simplement parce que tu n'a pas mis d'apostrophe autour. Cependant, s'il est censé s'agir d'une valeur numérique, il faut effectivement ne pas mettre d'apostrophe. Mais là c'est toi qui connais ton code.
ça doit ressembler à l'un des deux exemples en dessous : requete "SELECT * FROM MaTable WHERE monTexte '"+texte"'"; requete "SELECT * FROM MaTable WHERE monNombre "+monNombre;
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 févr. 2009 à 17:39
Si tu affiches cb_selectfoire.Text, tu verras que justement, ce n'est probablement pas un string ni un int. C'est de là que vient l'erreur.
Entre utiliser un string ou un int year, autant utiliser un string puisque dans tous les cas tu reconvertirait ton int en string lors de ta requête (tout simplement car ta requête n'est autre qu'un string)
Donc au final :
string year = cb_selectfoire.SelectedItem as string; // Là tu récupères le texte sélectionné
et après, tu fais ta requete avec ou sans les apostrophes selon que dans ta base de données, il considère ça comme un int ou un varchar (ça peut même peut-être marcher avec les 2).
Et un petit conseil : le débugger de Visual Studio est vraiment génial. Si tu veux voir une valeur à un moment précis, tu mets un point d'arrêt à la ligne en question (en cliquant à gauche de ton code, ça fait un point rouge). Le programme se mettera en pause AVANT l'exécution de la ligne, et tu pourras mettre ta souris sur tes variables pour voir leurs valeurs et propriétés. (Clique sur la flèche de lecture pour reprendre l'exécution de ton programme après).
En l'occurrence, tu aurais vu qu'au moment ou tu fais "string year = cb_selectfoire.Text;
", year n'a pas la bonne valeur. Enfin, c'est uniquement si, comme je le pense, l'erreur vient de là.
cs_bacio
Messages postés13Date d'inscriptionlundi 25 décembre 2000StatutMembreDernière intervention19 février 2009 16 févr. 2009 à 20:14
Merci beaucoup, je n'ai plus aucune erreur mais rien de s'affiche dans ma cb_selectsalon :s
c'est compliqué quand meme :D je vais continuer de fouiller les forums, mais la je bloque vraiment :s
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 17 févr. 2009 à 00:55
Tu devrais récupérer la valeur de ta requête, et la coller dans PhpMyAdmin (si tu as). Comme ça, tu verras si le problème vient de ta requête ou du traitement derrière.