0

Перейду сразу к сути дела! Есть dataGridView, в нем изначально отображены продукты(в моем случае это еда из макдональдса по типу наггетсов, бургеров и прочего). В этом отображении показана информация о продуктах(название, цена, каллорийность).

Помимо dataGridView на форме так же присутсвуют 3 кнопки и 1 comboBox откуда пользователь может выбрать критерий поиска товаров по таблице dataGridView

Среди критериев у меня имеются такие: -Самый дёшевый товар в таблице который есть

  • Самый дорогой товар в таблице который есть То есть после выбора одного из этих двоих критериев поиска в таблице должен отобразится только 1 элемент(или с минимальной или с максимальной ценой). У меня же в таблицу выводиться просто пустая строка почему то. Данные продукты объеденены в один класс именуемый Product, название, цена, калорийность указываеться в конструкторе.

Далее есть список куда эти продукты добавляються а потом отображаються в гриде

Вот код:

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.ComponentModel;
using System.Drawing;
using System.Threading;
namespace Mc
{
     public partial class Form1: Form 
     {
         public class Product 
         {
             public string Goods {get; set;}
             public double Price {get; set;}
             public int Kcal {get; set;}
             public Product(string name, double price, int kcal)
             {
                 Goods = name;
                 Price = price;
                 Kcal = kcal;
             }
         }
         public List<Product> Products;
         public Form1()
         {
              InitializeComponent();
              Products = new List<Product>()
              {
                   new Product("Big Mac", 200.0, 1500),
                   new Product("McChicken Classic", 150.0, 1200),
                   new Product("Coca Cola", 100.0, 1000),
                   new Product("Oreo McFlurry", 90.0, 2200),
                   new Product("Apple Pie", 120.0, 2500)
              };
             bindingSource.DataSource = Products;
             dataGridView.DataSource = bindingSource;
         }
       private void LINQSearch_Click(object sender, EventArgs e)
       {
           if(comboBox1.SelectedItem.ToString() == "Самый дёшевый товар")
           {
              var query = Products.Select(x=>x.Price).Min();
              bindingSource.DataSource = query;
              dataGridView.DataSource = bindingSource;
           }
           if(comboBox1.SelectedItem.ToString() == "Самый дорогой товар")
           {
              var query = Products.Select(x=>x.Price).Max();
              bindingSource.DataSource = query;
              dataGridView.DataSource = bindingSource;
           }
       }
     } 
}

Пробовал переменную query перевести в список методом ToList() но оно выдало ошибку Помогите пожалуйста :) Заранее очень благодарю за помощь! Самый полезный ответ отмечу галочкой

Edit: Пробовал также использовать запрос: (from pr in Products select pr.Price).Min() но оно тоже не помогло

  • Я не уверен, но вы пробовали .Select() на .Where() заменить? – RottenRat Nov 28 '22 at 10:44
  • @RottenRat Пробовал, выдает ошибку что нельзя неявно преобразовать тип double в bool – NULL_PTR_T Nov 28 '22 at 10:50
  • Данимаетесь дичью какой-то. Берете BindingList, привязываете его к DataSource таблицы через BindingSource, задаете фильтр в BindingSource - готово, ничего обновлять не надо, само всё обновилось. https://learn.microsoft.com/ru-Ru/dotnet/api/system.windows.forms.bindingsource.filter – aepot Nov 28 '22 at 11:10
  • @aepot Я не понимаю каким образом это сделать, я с этими Binding листами не умею работать Можно шаблон кода? – NULL_PTR_T Nov 28 '22 at 11:22
  • BindingList работает точно так же как List – aepot Nov 28 '22 at 11:31
  • Можно шаблон кода? - а это что? :) я же вам кидал под прошлым вопросом https://ru.stackoverflow.com/a/1199692/373567 разница только в том что между таблицей и списком дополнительно втыкается BindingSource как прокси, он то и будет заниматься фильтрацией. Проблема только в том, что вы просто не желаете разбираться. – aepot Nov 28 '22 at 11:53

0 Answers0