2009-08-28 23 views
2

有沒有任何方法來選擇其DataSource是一個匿名類的BindingSource的當前行的列?作爲數據源匿名類BindingSource的列

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; 

我想獲得u.ID的當前值。

+0

你的綁定源綁定了哪種類型的控件? – 2009-08-28 13:38:40

+0

它綁定到DataGridView控件。 – 2009-08-28 16:32:27

回答

2

這裏的問題是,BindingSource中的項目是Object類型的項目,您需要將它們轉換回它們的匿名類型,並且您不能這樣做......實際上,you can(選中「Casting to anonymous類型「部分),但這是一個聰明的竅門,未來可能無法使用。

其他(更好)選項來獲得一個屬性的值:

  • 用一個具體的類型,而不是一個匿名類型的
  • 使用反射來獲取屬性
  • C#4.0只的價值:使用動態關鍵字,然後調用您需要的屬性
  • 獲取綁定控件中的值(例如,如果您的數據源綁定到DataGridView,則獲取datagridview單元的值而不是綁定源值)
+0

但.NET框架如何解決此問題?如果我想將另一個BindingSource綁定到當前的子列表,我只需要設置字符串屬性DataMember,該成員變量如何從(可能是匿名的)DataSource對象中解析出來? – 2009-08-28 16:37:23

+1

從我能找到的,我認爲它使用反射來找到綁定屬性的值。 – 2009-08-28 17:12:41