2008-09-22 6 views
12

J'ai le code suivant:Comment lier le résultat de DataTable.Select() à un contrôle ListBox?

ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match") 
ListBox.DisplayMember = "name" 

Les DataTable.Select() method retourne un tableau de System.Data.DataRow objets.

Peu importe ce que je précise dans la propriété ListBox.DisplayMember, tout ce que je vois est le ListBox avec le nombre correct de tous les articles montrant que System.Data.DataRow au lieu de la valeur que je veux ce qui est dans la colonne "name"!

Est-il possible de lier au tableau résultant de DataTable.Select(), au lieu de le boucler et d'ajouter chacun à la ListBox?

(je n'ai pas de problème avec looping, mais ne semble pas une fin élégante!)

Répondre

33

Utilisez un DataView à la place.

ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows); 
ListBox.DisplayMember = "name" 
+0

Dans la plupart des cas, vous ne pouvez pas lier directement les contrôles standard à un DataTable ou à un DataRow. Vous devez obtenir un DataTableView ou un DataRowView. Josh a raison. – Will

+0

Bon appel, merci Josh. –

+1

Grande réponse, merci: o) – Andrew

1

Josh a raison avec le DataView. Si vous avez besoin d'un très gros marteau, vous pouvez prendre le tableau de lignes de n'importe quel DataTable.Select ("...") et faire une fusion dans un DataSet différent.

 

DataSet copy = new DataSet(); 
copy.Merge(myDataTable.Select("Foo='Bar'")); 
// copy.Tables[0] has a clone 
 

Cette approche de ce que vous essayez de faire est très probablement exagéré, mais il y a des cas où vous devrez peut-être obtenir un datatable sur un tableau de lignes où il est utile.

Questions connexes