ComboBox a son ancienne valeur après Clear ()

J’ai deux comboBox cb_Brand et cb_Model sur un WinForm.

cb_Model renseigne les valeurs sur la marque Select. le problème est le suivant: si nous sélectionnons la marque any et sélectionnons un modèle sous cette marque, cb_Model ne perd pas la valeur du modèle précédent sélectionné. Par exemple, si nous sélectionnons la marque Audi et le modèle A3 et que nous sélectionnons la marque Ford, lorsque je clique sur cb_Model pour sélectionner le modèle, celui-ci affiche le modèle A3, mais les autres modèles de la liste appartiennent à Ford.

mon code est:

 private void cb_Brand_SelectedIndexChanged(object sender, EventArgs e) { // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); CarModel _carmodel = new CarModel (); // Get Selected Car Brnad int CarBrandID = _carmodel .GetCarBrandID(cb_Brand.Text); //Enable choice of Model SortedList colM; colM = Model.ReadModel(CarBrandID); cb_Model.DisplayMember = "ModelText"; foreach (Model objM in colM.Values) { cb_Model.Items.Add(objM); } } 

Toute idée s’il vous plaît .. Merci


incapable de trouver la raison mais résolu avec un correctif temporaire:

 private void cb_Model_Click(object sender, EventArgs e) { cb_Model.Text = ""; } 

Merci beaucoup les gars à la vôtre

Au lieu d’append les éléments manuellement comme ceci:

 foreach (Model objM in colM.Values) { cb_Model.Items.Add(objM); } 

Laissez .NET s’en occuper pour vous et remplacez-le par ceci:

 cb_Model.DataSource = colMValues; 

Ce qui liera les données à la liste et actualisera automatiquement les éléments de la liste déroulante lorsqu’une source de données est définie.

Vous n’aurez plus besoin de ces lignes:

 // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); 

Lisez-le pour plus d’informations sur les listes de liens (et autres sources de données) avec les ComboBox:

Comment: lier un contrôle Windows Forms ComboBox ou ListBox à des données (MSDN)

@ w69rdy suggère une excellente solution.

La raison pour laquelle cb_Model n’a pas changé sa value est que vous n’avez jamais changé la valeur. cb_Model.Items.Clear () ne modifie pas l’index sélectionné; seuls les éléments sont supprimés de la liste déroulante.

En utilisant l’exemple de code fourni dans votre question:

 // Clear Current Data cb_Model.Text = ""; cb_Model.Items.Clear(); cb_Model.SelectedIndex = -1; // would effectively clear the previously selected value. 

J’ai eu le même problème maintenant et la méthode ResetText de Combobox a résolu le problème pour moi

Cela fonctionnerait

 combobox.ResetText(); 

J’ai essayé votre exemple. Pour moi, cela a fonctionné comme il se doit. Vous pouvez essayer de définir cb_model.SelectedText sur “” ou SelectedItem sur null

J’ai constaté que le fait de conserver l’étendue de la source de données à proximité du chargement de la liste déroulante fonctionnait pour moi. J’avais un datable avec une scope au niveau de la classe et cela ne s’éclaircissait pas, mais je l’ai ensuite introduit dans la scope au niveau de la fonction et l’avoir clairement après la charge, ce qui a fonctionné.

J’ai un problème similaire, essayé cmb.resettext, il efface le texte mais pas la valeur. Dans mon formulaire de chargement, j’ai le code ci-dessous: Dim cmd As New SqlCommand("SELECT stud_id,name FROM student_details WHERE stud_id NOT IN (SELECT stud_id FROM student_details WHERE hostel_id!=0)", sqlcont.Conn) Dim dr As SqlDataReader = cmd.ExecuteReader Dim dat As New DataTable Dim j As Integer For j = 0 To dat.Rows.Count - 1 dr.Read() Next dat.Load(dr) cmbstud.DisplayMember = "name" cmbstud.ValueMember = "stud_id" cmbstud.DataSource = New BindingSource(dat, Nothing) dr.Close() Dans mon événement btnhostel click, j’ai le code ci-dessous: frmallocateHostel_Load (Nothing, this) Je tente de recharger mon jeu de données et donc mes comboboxes. L’utilisation de cmbstud.resettext efface simplement le texte et non la valeur.

J’ai le même problème alors j’ai utilisé

 combobox1.SelectedIndex=-1 

et il fonctionne.