Столбец BindingSource с анонимным классом в качестве источника данных

2

Есть ли какой-либо метод для выбора столбца текущей строки BindingSource, чей 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;

Я хочу получить текущее значение u.ID.

  • 0
    Ваш источник привязки связан с каким типом контроля?
  • 0
    Он связан с элементом управления DataGridView.
Теги:
linq
data-binding
anonymous-class

1 ответ

2
Лучший ответ

Проблема здесь в том, что элементы в BindingSource имеют тип Object, и вам нужно преобразовать их обратно в их анонимный тип, и вы не можете этого сделать... на самом деле, вы можете (проверьте раздел "Кастинг в анонимные типы" ), но это умный трюк, который может не сработать в будущем.

Другие (лучшие) параметры для получения значения свойства:

  • Используйте конкретный тип вместо анонимного типа
  • Используйте отражение, чтобы получить значение свойства
  • Только С# 4.0: используйте динамическое ключевое слово, затем вызовите требуемое свойство
  • Получить значение в связанном элементе управления (например, если ваш источник данных привязан к DataGridView, получить значение ячейки datagridview вместо значения источника привязки)
  • 0
    Но как .NET Framework решает эту проблему? Если я хочу связать другой BindingSource с подсписком моего текущего, я просто должен установить строковое свойство DataMember , как эта переменная-член разрешается из (возможно, анонимного) объекта DataSource?
  • 1
    Из того, что я мог найти, я думаю, что он использует отражение, чтобы найти значение связанного свойства.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню