Partage
  • Partager sur Facebook
  • Partager sur Twitter

DropDownList c#

Pour site web asp.net en c#

28 avril 2010 à 9:07:22

Bonjour,

j'espère que vous pourrez m'aider pour mon problème qui m'empêche de continuer.

J'ai réaliser un projet qui contient une DropDownList (qui est une liste déroulante) qui est remplie à partir d'une base de donnée SQL et je travail avec Visual Studio.
Les problèmes :
- Le liste se re-rempli à chaque fois (j'ai tenter un Clear() mais un nouveau problème apparait) ;
- La sélection d'un élément ne fonctionne pas je doit passer par un bouton clics ;
- Suivant la modification, il me dit que "IDAgri" n'est plus dans ces élément valide.

J'avais déjà réaliser le même programme pour IHM Windows en c# et celui utilise une Combobox et marche parfaitement.

Mais pour le site web en asp.net en c#, ont peut utiliser que les DropDownList.
protected void Page_Load(object sender, EventArgs e)
        {
                RechercherNom();
        }

        private void DropDownListAgri_Click(object sender, EventArgs e)
        {
            Nettoyer();

        }

        private void Nettoyer()
        {
            Adresse.Text = "";
            Code_Postal.Text = "";
            Ville.Text = "";
            Numero.Text = "";
            Courriel.Text = "";

            DropDownListParcelle.Text = "";
            DropDownListParcelle.Text = "Parcelle";
            Commune_Parcelle.Text = "";
            Coordonnee_GPS.Text = "";
            Type_Ensemence.Text = "";
            Date_Ensemence.Text = "";
            Date_Controle.Text = "";
        }

        public void RechercherNom()
        {
            //nettoye la listBox avant d'insere les nom
            //DropDownListAgri.Items.Clear();

            //Appelle la méthode pour obtenir la liste des agriculteur à partir du serveur
            _ListeNomAgri = Gestion.ObtenirIDAgri();

            //recupere le nb de valeur dans la sortedlist
            int valeur = _ListeNomAgri.Count;

            //ajoute les noms à la combobox
            for (int i = 0; i < valeur; i++)
            {
                DropDownListAgri.Items.Add(_ListeNomAgri.ElementAt(i).Value);
            }
        }

        /* Permet de demander les informations en fonction de 
         * l'element selectionner
         */
        protected void DropDownListAgri_SelectedIndexChanged(object sender, EventArgs e)
        {
            int IDAgri = 0;

            //Permet de recuperer l'ID dans la base de donné correspondant à un Agriculteur
            IDAgri = _ListeNomAgri.ElementAt(_ListeNomAgri.IndexOfValue(DropDownListAgri.Text)).Key;

            AfficherInfoAgri(IDAgri);
            RechercherParcelle(IDAgri);
        }

        /* Permet de demander les informations en fonction de 
         * l'element selectionner
         */
        protected void Button1_Click(object sender, EventArgs e)
        {

            int IDAgri = 0;

            //Permet de recuperer l'ID dans la base de donné correspondant à un Agriculteur
            IDAgri = _ListeNomAgri.ElementAt(_ListeNomAgri.IndexOfValue(DropDownListAgri.Text)).Key;

            AfficherInfoAgri(IDAgri);
            RechercherParcelle(IDAgri);
        }

        /* Affiche les elements de la structure Agris 
         * dans les champs respectif
         */
        public void AfficherInfoAgri(int IDAgri)
        {
            DAgri = Gestion.DemanderInfosAgri(IDAgri);

            Adresse.Text = DAgri.Adresse;
            Code_Postal.Text = DAgri.CP.ToString();
            Ville.Text = DAgri.Ville;
            Numero.Text = DAgri.Mail;
            Courriel.Text = DAgri.Num;
        }


Merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
30 avril 2010 à 9:49:29

Salut,

Tu veux dire quoi par "se re-remplie" ? A quel moment ?

Pour obtenir la valeur de ta DropDown, enlève le button click et met AutoPostBack à true dans ta dropdown.

Dis-moi s'il te reste des erreurs après cela.
  • Partager sur Facebook
  • Partager sur Twitter
1 mai 2010 à 20:25:06

Merci Carnibal.
J'ai tester et sa ne fonctionne toujours pas mais je pense avoir trouver la solution.

1./ Je passe par une listebox plus pratique pour la lecture de site web sur smartphone tactile
2./ avec cette ligne de code :
DAgri = _ListeNomAgri.ElementAt(_ListeNomAgri.IndexOfValue(DropDownListAgri.Text)).Key;

Elle est assez complexe mais c'est elle qui fait tout principalement.
En texte elle devrait signifier : donne la valeur de l'ID dans la base de donnée, correspondant à la valeur selectionné dans la listebox de l'agriculteur (mieux que DropDownList) dans la variable DAgri.
Donc je vais rajouter un "ListBox1.SelectedIndex+1" si je me souvient bien ...
Malheureusement je ne pourrais vérifier ma solution que mardi ><.

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2010 à 1:24:12

J'ai trouvé une solution, qui est plus ou moins une bidouiller malgré moi.

Lorsque je lis les informations des parcelles chaque ligne contient l'ID devant ("ID - Nom") donc avec un "Slip" je récupère l'ID des parcelle.

Par contre j'ai toujours un problème quand je clique sur un des éléments à chaque fois il me recopie la liste (ou me recharge la liste) à la suite de l'ancienne. J'ai teste Clear() mais quand je le fait plus rien ne fonctionne ><.

Quelqu un aurait-il une solution ??

Merci d'avance.
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2010 à 12:29:12

Dommage que n'utilises plus ta DropDown, parce que tu aurais pu utiliser le DataBinding pour remplir ta DropDown à partir de ta liste. C'est très simple et tu n'aurais pas ce soucis bizarre de rechargement de liste.

Si ca t'interesses, postes le code complet aspx /CS.
  • Partager sur Facebook
  • Partager sur Twitter
9 mai 2010 à 2:26:38

Merci pour ta réponse.

Je pense que je peut reprendre facilement mon code avec une DropDown, mais je ne connais pas le DataBinding.
Mais après le quel serait le plus efficace pour un site Web utiliser principalement par WebMobile (sur smarthphone).
  • Partager sur Facebook
  • Partager sur Twitter
10 mai 2010 à 9:09:16

En gros, le databinding c'est le fait de lier une élément de l'interface graphique à une source de données (ici Ta dropdown à ta BD SQL).

L'avantage, c'est que tu dis "Ca c'est ma dropdown, ca c'est ma méthode qui retourne les données et débrouille toi"
Et après, ASP.net fait tout le reste.

Au début ca va te sembler un peu compliqué mais accroche-toi et ca ira.

Enfin, vu que ton site sera utiliser par des mobiles et que ASP gère le databinding, ca serait bête de t'embêter à refaire des traitements qui sont déjà existants, performants, optimisés et sans-erreurs.

Concernant le databinding, on va faire le plus simple (pour le code, je te garantis pas qu'il compile à 100%) :

1. Côté code, dans ta méthode RechercherNom :

public void RechercherNom()
{
    //Lier la source de la dropDown à ta Sortedlist
    DropDownListAgri.DataSource = Gestion.ObtenirIDAgri();

    //Remplir la dropdown
    DropDownListAgri.Databind();
}


2. Ensuite, tu override la méthode CreateChildControls (sous Visual Studio, dans ton code, en dehors d'une méthode, tu tapes override puis ESPACE et tu choisis la méthode) :


3. Pour récupérer la valeur que l'utilisateur sélectionne dans ta dropdown :
protected void DropDownListAgri_SelectedIndexChanged(object sender, EventArgs e)
{
    //1. Soit on passe par l'index dans la dropdown
    int indexSelected = DropDownListAgri.SelectedIndex;

    //2. Soit on récupère la valeur texte
    string valueSelected = DropDownListAgri.SelectedValue;

    //3. Soit on récupère l'item et on a accès au texte et à la valeur (qui peuvent être différentes)
    ListItem itemSelected = DropDownListAgri.SelectedItem;
}


Si tu as d'autres questions sur le databinding ou autre, n'hésite pas ;)
  • Partager sur Facebook
  • Partager sur Twitter
17 janvier 2020 à 14:21:56

HouDaBensalim a écrit:



-
Edité par HouDaBensalim 17 janvier 2020 à 14:22:39

  • Partager sur Facebook
  • Partager sur Twitter
17 janvier 2020 à 21:38:20

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter