web-dev-qa-db-fra.com

Comment définir la valeur sélectionnée dans Combobox?

J'utilise combobox sous forme de fenêtres c #. J'ai lié la liste d'articles comme ci-dessous:

var employmentStatus = new BindingList<KeyValuePair<string, string>>();

employmentStatus.Add(new KeyValuePair<string, string>("0", "[Select Status]"));
employmentStatus.Add(new KeyValuePair<string, string>("1", "Contract"));
employmentStatus.Add(new KeyValuePair<string, string>("2", "Part Time"));
employmentStatus.Add(new KeyValuePair<string, string>("3", "Permanent"));
employmentStatus.Add(new KeyValuePair<string, string>("4", "Probation"));

employmentStatus.Add(new KeyValuePair<string, string>("5", "Other"));
cmbEmployeeStatus.DataSource = employmentStatus;
cmbEmployeeStatus.ValueMember = "Key";
cmbEmployeeStatus.DisplayMember = "Value";
cmbEmployeeStatus.SelectedIndex = 0;

Je sauvegarde la valeur sélectionnée dans la base de données, par exemple 1 ou 2. Maintenant, je veux définir la valeur sélectionnée à partir d'un élément de base de données, comme:

cmbEmployeeStatus.SelectedValue =employee.employmentstatus;     

Mais la liste déroulante n'est pas sélectionnée avec valeur. Comment puis je faire ça?

38
thinzar

Essaye celui-là.

cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);

J'espère que ça t'as aidé. :)

46
sailhenz

Pour créer manuellement des ComboBox de style base de données en essayant de définir une relation entre un nombre (interne) et du texte (visible), j'ai constaté qu'il fallait:

  1. Stockez vos articles dans une liste (Vous êtes proche - sauf la chaîne, string - need int, string)
  2. DataSource propriété à la liste (Vous êtes bon)
  3. DataMember, DataValue (Vous êtes bon)
  4. Charger la valeur par défaut (vous êtes bon)
  5. Mettre en valeur depuis la base de données (Votre question)
  6. Obtenir une valeur à remettre dans la base de données (Votre prochaine question)

Premières choses d'abord. Changez votre KeyValuePair en afin qu'il ressemble à:

(0, "Sélectionner") (1, "Option 1")

Maintenant, lorsque vous exécutez votre sql "Sélectionner les employés où les employés sont blah" et que vous récupérez un entier, vous devez définir la liste déroulante sans perdre beaucoup de temps.

Simplement: * ** SelectedVALUE - pas Item * ** *

cmbEmployeeStatus.SelectedValue = 3;   //or

cmbEmployeeStatus.SelectedValue = intResultFromQuery;   

Cela fonctionnera si vous avez chargé manuellement la liste déroulante avec les valeurs de code, comme vous l'avez fait, ou si vous chargez la liste déroulante à partir d'une requête.

Si vos clés étrangères sont des entiers (ce que je fais, ils le sont tous), la vie est facile. Une fois que l'utilisateur a modifié la comboBox, la valeur que vous allez stocker dans la base de données est SelectedValue. (Cast à int si nécessaire.)

Voici mon code pour définir le ComboBox sur la valeur de la base de données:

if (t is DBInt) //Typical for ComboBox stuff
    {
    cb.SelectedValue = ((DBInt)t).value;
    }

Et pour récupérer:

((DBInt)t).value = (int) cb.SelectedValue;

DBInt est un wrapper pour un entier, mais cela fait partie de mon ORM qui me permet de contrôler manuellement la liaison de données et de réduire les erreurs de code.

Pourquoi ai-je répondu si tard? Je me débattais aussi avec cela, car il ne semblait pas y avoir de bonne information sur le Web sur la façon de le faire. Je l'ai compris et j'ai pensé que je serais gentil et que je le posterais pour que quelqu'un d'autre le voie.

15
CharlesW

Dans l'application Windows, nous utilisons comme ceci

 DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
 DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
4
subbulakshmi

Ci-dessous fonctionnera dans votre cas.

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

Lorsque vous définissez la propriété SelectedItem sur un objet, la zone de liste déroulante tente de rendre cet objet celui actuellement sélectionné dans la liste. Si l'objet se trouve dans la liste, il est affiché dans la partie d'édition du contrôle ComboBox et la propriété SelectedIndex est définie sur l'index correspondant. Si l'objet n'existe pas dans la liste, la propriété SelectedIndex reste à sa valeur actuelle.

EDIT

Je pense que la définition de l'élément sélectionné comme suit est incorrecte dans votre cas.

cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;

Comme ci-dessous

var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;

Vous devez attribuer la paire nom-valeur correcte.

3
CharithJ
cmbEmployeeStatus.Text = "text"
2
dpp

Utilisez la propriété SelectedIndex pour le statut d'employé respectif dans la liste déroulante.

2
Alban

Je soupçonne que quelque chose ne va pas lorsque vous enregistrez sur la base de données. Est-ce que je comprends vos pas comme:

  1. peupler et lier
  2. utilisateur sélectionne et élément, cliquez et enregistrez .. puis vous enregistrez dans la base de données
  3. maintenant si vous sélectionnez un autre élément, il ne sélectionnera pas?

obtenu plus de code, en particulier lors de la sauvegarde? où dans votre code sont en cours d'initialisation et de remplissage de la liste de liaison

1
Rached N.

essaye ça

combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
1

Essaye ça:

KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
0
simi

Une solution possible:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
0
Jahir

Pour définir la valeur dans la zone de liste déroulante

cmbEmployeeStatus.Text="Something";
0
Rasel