web-dev-qa-db-fra.com

Comment obtenir la valeur de l'élément sélectionné dans la listbox

Je travaille avec C # .NET 4.0

J'essaie d'obtenir la valeur d'un seul élément sélectionné dans une liste déroulante.

Voici comment je remplis le contrôle:

this.files_lb.DataSource = DataTable object

Dans mon concepteur, j'ai spécifié file_name en tant que DisplayMember et file_id en tant que DisplayValue

Après avoir sélectionné un élément dans la liste, j'ai essayé ce qui suit pour obtenir la valeur:

this.files_lb.SelectedValue.ToString()

Mais tout ce qu'il retourne est "System.Data.DataRowView".

À ce lien: Obtenir la valeur de l’élément sélectionné dans la zone de liste sous forme de chaîne

quelqu'un a suggéré -

String SelectedItem = listBox1.SelectedItem.Value

Cependant, «Valeur» n'est pas une option lorsque j'essaie cela.

Comment puis-je obtenir la valeur ValueMember d'un seul élément sélectionné dans une zone de liste?

5
Lee Loftiss

var text = (listBox1.SelectedItem as DataRowView)["columnName"].ToString();

Remplacez columnName par le nom de la colonne à partir de laquelle vous souhaitez obtenir des données, qui correspondra à une colonne de votre source de données.

Surveillez également les valeurs NULL s'il n'y a pas d'élément sélectionné.

9
Jon Barker

Cela devrait vraiment être aussi facile. J'ai le texte suivant dans un événement de clic sur le bouton pour m'assurer que je ne le simplifiais pas trop dans ma tête:

private void button1_Click(object sender, EventArgs e)
    {
        string selected = listBox1.GetItemText(listBox1.SelectedValue);
        MessageBox.Show(selected);
    }

Et le résultat:

enter image description here


Modifier

Il semble que votre problème provient peut-être de la non définition d'une propriété sur le contrôle:

enter image description here

  1. Sélectionnez le contrôle ListBox
  2. Cliquez sur la petite flèche pour afficher les options de reliure/éléments
  3. Sélectionner Utiliser les éléments liés aux données

Si je désélectionne cette case, le comportement que vous décrivez est exactement le même.

5
Austin T French

 enter image description here

var selectedValue = listBoxTopics.SelectedItem;
if (selectedValue != null)
{ 
     MessageBox.Show(listBoxTopics.SelectedValue.ToString());
}
2
Sunny Okoro Awa

Vous devrez peut-être définir le champ DataValueField de la zone de liste.

NewEmployeesLB.DataSource = newEmployeesPersons.DataList.Select(np => new 
ListItem() { Text = np.LastName + ", " + np.FirstName, Value = np.PersonID.ToString() }).ToList();
            NewEmployeesLB.DataTextField = "Text";
            NewEmployeesLB.DataValueField = "Value";
            NewEmployeesLB.DataBind();
0
Neeta