Comment définir la valeur sélectionnée à partir de Combobox?

j'utilise combobox sous la forme c # windows. J'lié à l'élément de liste 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 sauve 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 de l'article de la base de données comme:

cmbEmployeeStatus.SelectedValue =employee.employmentstatus;     
<!-Mais combobox n'a pas été sélectionné avec value. Comment puis-je le faire?

33
demandé sur CharithJ 2011-07-14 07:27:49

11 réponses

essayez celui-ci.

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

J'espère que ça aidera. :)

41
répondu sailhenz 2011-07-14 03:31:09

afin de faire de la base de données de style de zones de liste modifiables manuellement la mise en place d'une relation entre un nombre (à l'interne) et un peu de texte (visible), j'ai trouvé, vous devez:

  1. vous stocker dans une liste (vous êtes proche - sauf la chaîne,string - besoin int,string)
  2. propriété DataSource à la liste (Vous êtes bon)
  3. DataMember,DataValue (Vous êtes bon)
  4. Charger valeur par défaut (Vous êtes bon)
  5. mise en valeur à partir de la base de données (votre question)
  6. Obtenir la valeur à remettre dans la base de données (Votre question suivante)

les premières choses d'abord. Changez votre KeyValuePair pour qu'il ressemble à:

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

Maintenant, lorsque vous exécutez votre sql "Select empstatus from employees where blah" et récupérez un entier, vous devez configurer le combobox sans perdre un tas de temps.

Simplement: **** SelectedVALUE-not Item *****

cmbEmployeeStatus.SelectedValue = 3;   //or

cmbEmployeeStatus.SelectedValue = intResultFromQuery;   

cela fonctionnera si vous avez chargé manuellement le combobox avec des valeurs de code, comme vous l'avez fait, ou si vous chargez le comboBox à partir d'une requête.

si vos clés étrangères sont des entiers, (ce qui pour ce que je fais, ils le sont tous), la vie est facile. Une fois que l'Utilisateur a effectué le changement vers le comboBox, la valeur que vous stockerez dans la base de données est SelectedValue. (Cast en int en tant que de besoin.)

Voici mon code à définir la zone de liste déroulante de la valeur à partir 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 donne le contrôle manuel de la databinding, et réduit les erreurs de code.

Pourquoi ai-je répondu si tard? J'étais aux prises avec cela aussi, comme il semble n'y avoir aucune bonne information sur le web sur la façon de faire ceci. J'ai trouvé, et j'ai pensé que je serais sympa et que je le posterais pour que quelqu'un d'autre le voie.

14
répondu CharlesW 2012-12-05 22:24:56

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
répondu subbulakshmi 2012-07-16 11:40:18

ci-Dessous dans votre cas.

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

lorsque vous définissez la propriété SelectedItem à un objet, le ComboBox tente de faire de cet objet l'objet actuellement sélectionné dans la liste. Si l'objet se trouve dans la liste, il s'affiche dans la partie édition du ComboBox et la propriété SelectedIndex est définie à l'index correspondant. Si l'objet n'existe pas dans la liste, la propriété SelectedIndex est laissé dans son état actuel valeur.

EDIT

je pense que définir l'article sélectionné comme ci-dessous est incorrect dans votre cas.

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

Comme ci-dessous

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

vous devez assigner la paire de valeurs de nom correcte.

3
répondu CharithJ 2011-07-15 14:23:42

utilisez la propriété SelectedIndex pour le statut d'employé respectif dans la boîte bascule.

2
répondu Alban 2011-07-14 03:35:33
cmbEmployeeStatus.Text = "text"
2
répondu dpp 2012-11-19 09:42:03

je soupçonne que quelque chose ne va pas quand vous économisez sur le db. Dois-je comprendre vos étapes:

  1. peupler et lier
  2. l'utilisateur sélectionne et item, hit et save.. puis vous enregistrez dans la base de données
  3. maintenant, si vous sélectionnez un autre point de ne pas choisir?

vous avez plus de code, surtout quand vous économisez? où dans votre code initialisent et peuplent la bindinglist

1
répondu Rached N. 2011-07-14 06:08:26

essayez ceci

combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
1
répondu André Luiz Silveira 2017-04-04 12:48:02

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

cmbEmployeeStatus.Text="Something";
0
répondu Rasel 2011-07-14 03:32:48

une solution possible:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
0
répondu Jahir 2013-08-03 22:06:58

essaye ceci:

KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
0
répondu simi 2013-09-03 11:44:41