Permettre une sélection vide dans un combobox databound

Permettre une sélection vide dans un combobox databound - C#/.NET managed - Programmation

Marsh Posté le 05-06-2008 à 14:50:05    

Hello
 
Je suis nouveau dans la prog .net "applications de bureau" (mais j'ai de l'expérience en asp.net).
J'ai un combobox databound (avec des éléments qui viennent de la BDD), et je veux permettre "aucune sélection".
J'avais pensé à bêtement faire un Items.Add("" ) mais ça n'est pas permis avec les combobox databound (ce qui est stupide mais passons).
La seule solution que j'aie trouvé en cherchant sur le net, c'est soit de remplir mon contrôle à la main (mais dans ce cas je n'ai pas trouvé comment séparer l'affichage et la valeur, pour récupérer l'id de l'élément), soit de faire un custom control (mais si je pouvais éviter ça serait pas plus mal).
 
Donc voilà, est-ce qu'il n'y aurait pas un moyen simple pour faire cette opération toute bête ? (qui se fait en 3 clics en asp.net, ça m'étonne que ça soit pas possible en .net-pas-asp...)


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 14:50:05   

Reply

Marsh Posté le 05-06-2008 à 14:54:29    

Tu ne peux pas modifier la requête de BDD ? Avec un UNION tu peux ramener une ligne "vide" qui peut te servir d'élément neutre pour la sélection. Sinon y'a pas d'option sur ce composant ?


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 05-06-2008 à 15:22:32    

Ouais j'ai pensé aussi à ajouter une ligne vide à ma requête, mais je préfèrerais éviter si possible.
J'ai regardé toutes les options, j'ai rien trouvé qui corresponde à mon besoin.


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 15:34:09    

les combobox avec une DataSource, c'est le mal. vaut mieux remplir les items à la main, ça coute pas plus cher et ça permet une plus grande liberté d'action :

Code :
  1. comboSchtroumpf.Items.Add("No selection" );
  2. sql = @"SELECT DISTINCT truc FROM base";
  3. command.CommandText = sql;
  4. reader = command.ExecuteReader();
  5. while (reader.Read())
  6.    comboSchtroumpf.Items.Add(reader["truc"]);
  7. reader.Close();



---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2008 à 15:36:36    

Chez Harkonnen, ça ne coûte pas plus cher de bien coder [:vague nocturne]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 05-06-2008 à 15:53:30    

Tu crois qu'il se passe quoi quand tu affectes une Datasource au Combobox ? Qu'il se remplit par l'opération du St Esprit ? Y'aura forcément un parcours des données à faire. Dés lors, je ne vois pas en quoi c'est mal de le faire soi même, et ainsi de garder le controle sur le contenu du combobox plutot que de faire confiance au designer et de se priver de ce genre d'opérations. Comme dit Petzold, il ne faut jamais laisser passer l'occasion de bypasser le designer.
Quant à ton idée de faire une UNION, permet moi de te dire que c'est particulièrement crade de faire ce genre d'opération tout ça pour rajouter une malheureuse ligne à un combobox. Les données, ce sont les données, on n'a pas à s'en servir pour faire ce genre de trick surtout quand une autre solution existe et sémantiquement bien plus juste


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2008 à 15:57:27    

Mais t'es complètement demeuré mon pauvre [:mlc]
Faut te faire soigner, prendre des cachets ou prendre des vacances. T'as un problème naturel d'agressivité avec les gens ou t'as tes règles ?
 
Je fais un jeu de mots idiot mais bon enfant calqué sur le slogan de la pub flunch, je fous ce smiley parce que j'ai la flemme de chercher un smiley Aimé Jaquet et tu pètes le string.
 
Faut que t'arrêtes deux minutes hein [:kiki]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 05-06-2008 à 16:03:19    

___alt a écrit :

Mais t'es complètement demeuré mon pauvre [:mlc]
Faut te faire soigner, prendre des cachets ou prendre des vacances. T'as un problème naturel d'agressivité avec les gens ou t'as tes règles ?
 
Je fais un jeu de mots idiot mais bon enfant calqué sur le slogan de la pub flunch, je fous ce smiley parce que j'ai la flemme de chercher un smiley Aimé Jaquet et tu pètes le string.
 
Faut que t'arrêtes deux minutes hein [:kiki]


désolé d'avoir pris ton message sur le ton de l'agressivité, mais moi j'ai compris que tu sous entendais que ma solution était pourrie, stout :spamafote:
sorry :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2008 à 16:04:31    

Ah bah non pour le coup :o
Ca m'apprendra à faire des blagues sur des topics sérieux :o


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 05-06-2008 à 16:09:58    

Harkonnen a écrit :

les combobox avec une DataSource, c'est le mal. vaut mieux remplir les items à la main, ça coute pas plus cher et ça permet une plus grande liberté d'action :

Code :
  1. comboSchtroumpf.Items.Add("No selection" );
  2. sql = @"SELECT DISTINCT truc FROM base";
  3. command.CommandText = sql;
  4. reader = command.ExecuteReader();
  5. while (reader.Read())
  6.    comboSchtroumpf.Items.Add(reader["truc"]);
  7. reader.Close();



 
ok, mais dans ce cas, comment je fais pour récupérer l'id ?
en fait j'ai des réunions de commissions, et mon combobox liste les commissions, mais il est possible qu'une réunion ne se passe dans aucune commission.
 
En asp.net, j'ai l'habitude d'avoir un dropdown composé d'items qui ont une valeur et un texte, et après je récupère la valeur.
En .net-pas-asp, là j'étais content ça faisait pareil, sauf que si j'utilise ta méthode, j'ajoute juste le texte, pas la valeur ; dans ce cas, je fais comment pour récupérer la valeur ?


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 16:09:58   

Reply

Marsh Posté le 05-06-2008 à 16:10:27    

non non c'est ma faute, j'ai qu'à regarder la télé plus souvent, je connaitrais la pub flunch :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2008 à 16:14:54    

et arrêtez de vous fighter sur mon topic ou j'appelle la modération [:ooinverse]


Message édité par cosmoschtroumpf le 05-06-2008 à 16:15:06

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 16:31:24    

[:zytrasnif][:zytrasnif][:zytrasnif]
[:zytrasnif][:zytrasnif][:zytrasnif]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 05-06-2008 à 16:39:30    

cosmoschtroumpf a écrit :

ok, mais dans ce cas, comment je fais pour récupérer l'id ?


REPONDEZ A LA QUESTION §§§ /FOU/


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 17:05:14    

cosmoschtroumpf a écrit :


En .net-pas-asp, là j'étais content ça faisait pareil, sauf que si j'utilise ta méthode, j'ajoute juste le texte, pas la valeur ; dans ce cas, je fais comment pour récupérer la valeur ?


poste voir une capture d'écran d'un combo ASP stp, je les connais pas et je sais pas la gueule qu'ils ont :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2008 à 17:13:55    

cosmoschtroumpf a écrit :


REPONDEZ A LA QUESTION §§§ /FOU/


 
bah c des object dans items donc tu mets ce que tu veux dedans et tu cast le selecteditem comme il faut, sachant que lui il affiche le ToString()

Reply

Marsh Posté le 05-06-2008 à 17:24:30    

<asp:DropDownList ID="DropDownListDepartement" runat="server" AppendDataBoundItems="True" DataSourceID="SqlDepartement" DataTextField="departement_num" DataValueField="departement_id">
    <asp:ListItem Text="blabla" Value="0"></asp:ListItem>
</asp:DropDownList>
 
Ca fait un dropdown (un <select /> en html) avec les éléments ajoutés à la main suivis des élements de la requête, et après j'ai juste à accéder au SelectedValue pour avoir l'identifiant de l'élément sélectionné.


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 17:27:18    

kazzz a écrit :

bah c des object dans items donc tu mets ce que tu veux dedans


ok

 
kazzz a écrit :

et tu cast le selecteditem comme il faut, sachant que lui il affiche le ToString()


je fais une classe pour mon élément, et je remplace la méthode tostring pour renvoyer la donnée que je veux, c'est ça ?

 

J'ai pas l'habitude de ce genre de prog, en asp.net c'est toujours du texte, c'est vachement différent :D


Message édité par cosmoschtroumpf le 05-06-2008 à 17:27:49

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 05-06-2008 à 17:38:23    

ouai un truc comme ça et tu recuperes le selecteditem (selectedvalue et selectedtext ça reste a null)
 

Code :
  1. public class ComboBoxItem
  2.     {
  3.         private int _id;
  4.         public int Id
  5.         {
  6.             get { return _id; }
  7.             set { _id = value; }
  8.         }
  9.         private string _text;
  10.         public string Text
  11.         {
  12.             get { return _text; }
  13.             set { _text = value; }
  14.         }
  15.         public ComboBoxItem(int id, string txt)
  16.         {
  17.             Id = id;
  18.             Text = txt;
  19.         }
  20.         public override string ToString()
  21.         {
  22.             return Text;
  23.         }
  24.     }

Reply

Marsh Posté le 05-06-2008 à 18:31:40    

kazzz a écrit :

ouai un truc comme ça et tu recuperes le selecteditem (selectedvalue et selectedtext ça reste a null)


putain et ça compile et tout en plus [:dawao] (pas encore implémenté mais je ne doute pas que ça marchera aussi [:dawao])
 
merci [:romf]


---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 06-06-2008 à 11:51:00    

bon et maintenant, si je veux sélectionner un item par défaut... [:noxauror]


Message édité par cosmoschtroumpf le 06-06-2008 à 11:51:37

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 06-06-2008 à 13:14:43    

ben t'assignes un comboboxitem a selecteditem

Reply

Marsh Posté le 06-06-2008 à 13:21:53    

J'ai l'habitude d'utiliser cette classe pour gerer les item de mes comboBox :

 
Code :
  1. public class KeyItem<T>
  2.    {
  3.        #region MEMBERS
  4.        private T m_Key;
  5.        private string m_value;
  6.        #endregion
  7.  
  8.        #region CONTRUCTOR
  9.        public KeyItem(T key, string value)
  10.        {
  11.            m_Key = key;
  12.            m_value = value;
  13.        }
  14.        #endregion
  15.  
  16.        #region PROPERTIES
  17.        public T Key
  18.        {
  19.            get { return m_Key; }
  20.            set { m_Key = value; }
  21.        }
  22.  
  23.        public string Value
  24.        {
  25.            get { return m_value; }
  26.            set { m_value = value; }
  27.        }
  28.        #endregion
  29.  
  30.        #region PUBLIC
  31.        //-----------------------------------------------------------------------
  32.        public override bool Equals(object obj)
  33.        {
  34.            if (!(obj is KeyItem<T> ))
  35.                return false;
  36.  
  37.            if (((KeyItem<T> )obj).Key.Equals(this.Key) && ((KeyItem<T> )obj).Value == this.Value)
  38.                return true;
  39.  
  40.            return base.Equals(obj);
  41.        }
  42.        //-----------------------------------------------------------------------
  43.        public override string ToString()
  44.        {
  45.            return this.Value;
  46.        }
  47.        //-----------------------------------------------------------------------
  48.        public override int GetHashCode()
  49.        {
  50.            return base.GetHashCode();
  51.        }
  52.        #endregion
  53.  
  54.    }
 

et ensuite pour selectionner un item par défaut => Propriete SelectedItem / SelectedIndex

 


EDIT : Grillaid :(


Message édité par Koyomi le 06-06-2008 à 13:23:51
Reply

Marsh Posté le 06-06-2008 à 14:26:30    

kazzz a écrit :

ben t'assignes un comboboxitem a selecteditem


oui ça d'accord, mais c'est comment déterminer quel comboboxitem doit être sélectionné :o
 
Du coup en fait j'ai fait une collection de comboboxitems, que je remplis lors du chargement des données, et que j'affiche sur le combobox lors de l'affichage des données. Et pour sélectionner une valeur par défaut (lors de l'édition), je parcours tous les éléments de mon combobox, et si il y en a un qui correspond, je le met en tant que selecteditem.
 
J'ai bon, ou c'est horrible ?
 
 
 
Je suis sûr que si je postais tout mon code, vous pleureriez des larmes de sang [:dawao]


Message édité par cosmoschtroumpf le 06-06-2008 à 14:26:58

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 06-06-2008 à 14:33:24    

Bah tu fais un cast de selecteditem avec le type d'objets que t'as dans ta liste et ça te donne directement ton objet.


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 06-06-2008 à 14:36:07    

oui non mais ça d'accord :D
 
ce que je veux dire, c'est que, au chargement de la page, je ne vois pas d'autre solution que de faire ça :
 

Code :
  1. foreach (ComboBoxItemCommission c in comboBoxCommission.Items)
  2. {
  3.     if (c.Id == (int)drevenement["commission_id"])
  4.     {
  5.          comboBoxCommission.SelectedItem = c;
  6.     }
  7. }


 
pour sélectionner par défaut une certaine commission :o


Message édité par cosmoschtroumpf le 06-06-2008 à 14:37:02

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le 06-06-2008 à 14:41:06    

Ah oui ok [:tinostar]


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 06-06-2008 à 14:49:03    

tu ne peut pas selectionner ton element pendant le chargement de ta combo ?
 
genre :
 
foreach(Item i in maListe)
{
   ComboBoxItem item = combo1.Items.Add(i);
   if(i.Id = monId)
      combo1.SelectedItem = item;
   
}
 
??

Reply

Marsh Posté le 06-06-2008 à 14:51:06    

Koyomi a écrit :

tu ne peut pas selectionner ton element pendant le chargement de ta combo ?


si, c'est vrai, mais j'ai une méthode qui récupère les données et une autre qui les affiche, j'avais voulu les laisser séparées :o

 

bon, de toute façon c'est sans doute pas la meilleure méthode, mais au moins ça marche, je progresse :D


Message édité par cosmoschtroumpf le 06-06-2008 à 14:51:18

---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed