DataReader et DropDownList, probleme de retour de donnees [Résolu]

Evil_Gouki_X 19 Messages postés mardi 29 mai 2007Date d'inscription 22 mai 2010 Dernière intervention - 26 nov. 2007 à 10:33 - Dernière réponse : Evil_Gouki_X 19 Messages postés mardi 29 mai 2007Date d'inscription 22 mai 2010 Dernière intervention
- 27 nov. 2007 à 04:24
Bonjour a tous.

je poursuis tranquilement le developpement en c# et voila que je me heurte a un probleme qui semblerait tout bete pour vous. Cependant je n'arrive pas a m'en sortir.
 donc j'explique: (VS2005, BD sqlserver2000, avec la requete SQL je dois afficher 6 resultats)

j'ai trouve comment afficher des infos rapidement dans une combo box grace au DataReader:

protected void Page_Load(object sender, EventArgs e)
    {
    SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());
    SqlCommand cmd = new SqlCommand("TEST", cn);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    SqlDataReader reader = null;



    cn.Open();
    try
    {
     reader = cmd.ExecuteReader();
     while (reader.Read())
     {
      ddlTestReader.Items.Add(reader["product_name"].ToString());
     }
     reader.Close();
    }
    catch (Exception ex)
    {
     lblErrmsg.Text = "Voila l'erreur" + ex;
    }
    cn.Close();
        
    }
</Code C#>
Ca ca marche au poil, j'ai mes donnees de BD qui s'affiche dans mon ddl. MAIS (oui il y a toujours un mais) vous aurez remarquez que ce programme se trouve dans le protected void Page_Load. En general je cree le programme dans d'autre fichier cs et je les instancie dans mon programme proprement dit.

J'ai donc cree sur une feuille cs a part, une class que j'ai appele Master avec une methode que j'ai appele testdureade.
mais le probleme c'est qu'en faisant ca ma fonction ne me retourne que la valeur de la premiere ligne de la BD.

<Code C#protected void Page_Load>
protected void Page_Load(object sender, EventArgs e)
    {
        Master master = new Master();       
        
       ddlTestReader.Items.Add(master.testduReader());        
    }


public class Master
{
    public Master()
    {
    }
public string testduReader()
 {
  SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());
  SqlCommand cmd = new SqlCommand("TEST", cn);
  cmd.CommandType = System.Data.CommandType.StoredProcedure;
  SqlDataReader reader = null;
  
  cn.Open();
  try
  {
   reader = cmd.ExecuteReader();
   while (reader.Read())
   {
    return reader["product_name"].ToString();
   }
   
   reader.Close();
  }
  catch
  {
   return "ERROR";
  }
  cn.Close();
//si je ne met que le return vert une erreur est generee apres compilation, quand ma page se charge.
//et si je ne met que le return rouge je ne peux pas compiler car 
//on me signal qu'il manque une valeur a renvoyer. donc faute de mieux j'ai mis ca.
  return reader["product_name"].ToString();  
 }
 }


En Faisant le debug je me suis appercu que la boucle while est arretee au return (en rouge) et que c'est pour cela que je n'ai donc qu'une seule valeur dans mon drop down list.
mon probleme c'est que je ne sais vraiment pas quoi utiliser pour me renvoyer toutes les valeurs.
j'ai essaye avec ArrayList, List<string>. mais le probleme c'est qu'il me retourne la list et non pas son contenu.
j'ai aussi essaye plusieurs changements mais je ne suis arrive a rien de mieux.

auriez vous une piste pour moi s'il vous plait?
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 26 nov. 2007 à 10:54
3
Merci
Hello,

Essaie de créer ta méthode en retournant une liste de string :

public

List<string> testduReader()
{
List<string> result = newList<string>();
...

using (reader = cmd.ExecuteReader()){
while (reader.Read())
   {
    result.Add(reader["product_name"].ToString());
   }
return result;
}
...
}

Puis remplis ton ddlTestReader comme ceci :

ddlTestReader.Items.AddRange(testduReader().ToArray());

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de SharpMao
Meilleure réponse
Evil_Gouki_X 19 Messages postés mardi 29 mai 2007Date d'inscription 22 mai 2010 Dernière intervention - 27 nov. 2007 à 04:07
3
Merci
Salut SharpMao
merci pour ton aide.
grace a toi j'ai trouver une autre facon legerement differentes utilisant les ListItems. je la met ici ca peut servir peut etre.
bien entendu j'espere avoir des critiques sur cette facon de faire afin de pouvoir l'ameliorer.

protected void Page_Load(object sender, EventArgs e)
    {
           List<ListItem> mylist = new List<ListItem>();                               
          Master master = new Master();    
          mylist = master.testduReader();
          ddlTestReader.Items.AddRange(mylist.ToArray());
   }


public List<ListItem> testduReader()
 { 
        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());
        SqlCommand cmd = new SqlCommand("TEST", cn);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        SqlDataReader reader = null;
        List<ListItem> mylists = new List<ListItem>();
  
        cn.Open();
           try
           {
               reader = cmd.ExecuteReader();
                  while (reader.Read())
                  {
                         ListItem mylist = new ListItem();
                         mylist.Text = reader["product_name"].ToString();    
                         mylists.Add(mylist);
                  }
               reader.Close();
           }
           catch
           {
               System.Diagnostics.Debug.WriteLine(ex.Message);
           }
           cn.Close();
           return mylists;
 }

Merci Evil_Gouki_X 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Evil_Gouki_X
Meilleure réponse
Evil_Gouki_X 19 Messages postés mardi 29 mai 2007Date d'inscription 22 mai 2010 Dernière intervention - 27 nov. 2007 à 04:24
3
Merci
ah j'ai un ami qui vient de me donner une methode qui est plus efficace a ce qu'il parait.
elle fonctionne bien donc je la met aussi.

protected void Page_Load(object sender, EventArgs e)
    {
           xMaster.testduReader(ddlTestReader);
   }


//ps: heu.. j'ai du changer ma Class Master en xMaster car il y avait des problemes de reconnaissances
//en effet Master existe deja et est utilise pour les master page si je ne me trompe pas
public class xMaster{

public xMaster(){}

public static void testduReader(DropDownList ddl)
  {
  
   SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());
   SqlCommand cmd = new SqlCommand("TEST", cn);
   cmd.CommandType = System.Data.CommandType.StoredProcedure;
   SqlDataReader reader = null;   
   cn.Open();
   try
   {
    reader = cmd.ExecuteReader();
    while (reader.Read())
    {   
      //PS: ici je peux selectionner 2 colonnes de ma BD. je n'ai plus besoin de la liste
     ddl.Items.Add(new ListItem(reader["product_name"].ToString(),reader["product_id"].ToString()));
    }

      reader.Close();
   }
   catch (Exception ex)
   {
    System.Diagnostics.Debug.WriteLine(ex.Message);
   }
   cn.Close();   
  }
}


a plus

Merci Evil_Gouki_X 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Evil_Gouki_X

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.