2009-08-28 9 views
2

Existe-t-il une méthode pour sélectionner une colonne de la ligne actuelle d'une BindingSource dont DataSource est une classe anonyme?Colonne de BindingSource avec une classe anonyme en tant que DataSource

var userResults = from u in dataContext.Users 
      join c in dataContext.Computers on u.ID equals c.UserID 
      where doSearch 
      && u.Name.Contains(userNameTextBox.Text) 
      && u.UserName.Contains(userUsernameTextBox.Text) 
      select new { u.Name, u.UserName, u.Branch, c.Installations, u.ID }; 
userBindingSource.DataSource = userResults; 

Je veux obtenir la valeur actuelle de u.ID.

+0

Votre source de liaison est liée à quel type de contrôle? –

+0

Il est lié à un contrôle DataGridView. –

Répondre

2

Le problème ici est que les éléments de BindingSource sont de type Object et que vous devez les reconvertir en leur type anonyme, et vous ne pouvez pas le faire .... en réalité, you can (cochez la case "Convertir en anonyme types "section), mais c'est une astuce intelligente qui pourrait ne pas fonctionner à l'avenir.

Autres (meilleures) options pour obtenir la valeur d'une propriété:

  • Utilisez un type de béton au lieu d'un type anonyme
  • réflexion utiliser pour obtenir la valeur de la propriété
  • C# 4.0 uniquement Utilisez le mot clé dynamique puis appelez la propriété dont vous avez besoin
  • Récupérez la valeur dans le contrôle lié (par exemple, si votre source de données est liée à un DataGridView, récupérez la valeur de la cellule dataagridview au lieu de la valeur de la source de liaison)
+0

Mais comment .NET Framework résout ce problème? Si je veux lier une autre BindingSource à une sous-liste de mon actuelle, je dois simplement définir la propriété de chaîne 'DataMember', comment cette variable membre est-elle résolue à partir de l'objet DataSource (peut-être anonyme)? –

+1

De ce que j'ai pu trouver, je pense qu'il utilise la réflexion pour trouver la valeur de la propriété liée. –