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?
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é.
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:
Il semble que votre problème provient peut-être de la non définition d'une propriété sur le contrôle:
Si je désélectionne cette case, le comportement que vous décrivez est exactement le même.
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();