2009-02-09 1 views
4

В C# 3.5 с помощью ComboBox для отображения результатов запроса LinQ. Как установить свойство selecteditem в поле со списком, когда запрос LinQ возвращает анонимный тип?Использование свойства SelectedItem ComboBox w/Linq Anonymous Тип

Я установил источник данных из выпадающего списка вдоль этих линий:

comboBox1.DataSource = from p in db.products 
        select p; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "ProductId"; 

Если я, что я могу выбрать выбранный элемент, делая что-то вроде:

comboBox1.SelectedItem = (from p in db.products 
          where p.ProductId = 5 
          select p).First(); 

Проблема в том, что я хочу для заполнения выпадающего списка с анонимным результатом типа:

comboBox1.DataSource = from p in db.products 
        select new 
        { 
        p.ProductId, 
        p.Name 
        }; 

Анонимный тип I ' Фактически, использование более сложное, чем это, но этого достаточно для объяснения.

ответ

2

Как о преобразовании его в список, а затем выбрать правильный из него. Поскольку SelectedItem не работает, вы можете попробовать установить SelectedValue.

var productList = (from p in db.products 
        select new { 
         ProductId = p.ProductID, 
         Name = p.Name 
        }).ToList(); 

comboBox1.DataSource = productList; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "ProductId"; 
comboBox1.SelectedValue = 5; 
+0

Я просто попробовал, он, похоже, не меняет выбранный элемент. Он также работает, только если выполняется правильно, когда он загружен. Выбранный элемент может быть установлен в другой функции. Благодарю. –

+0

Попробовал ли вы установить SelectedValue на правильный ProductId. Я обновлю код. – tvanfosson

+0

Кроме того, у меня была ошибка в логике выбора. Я исправил это - должен был быть метод Where вместо метода Select. Изменение этого может привести к тому, что предыдущий пример будет работать. – tvanfosson

0

Это должно сделать трюк

var list = (from p in db.products 
       select new { 
          p.ProductId, 
          p.Name 
          }).ToList(); 
comboBox1.DataSource = list; 
comboBox1.SelectedItem = list[0]; 
+0

Это добавит первый результат из запроса LinQ в раскрывающийся список. Я хочу добавить все результаты в список, но выберите конкретный элемент послесловия. –

+0

Я вижу, что вы говорите, дайте мне секунду, и я обновлю ответ – JaredPar

+0

Это работает, если вы знаете, какая запись в списке - тот, который вы хотите по номеру записи. Он не работает, если вы выбрали выбранный элемент в другой функции из той, которая загружает список. Еще раз спасибо. –

Смежные вопросы