c# фильтрация Datagridview с помощью combobox
есть datagridview привязанный к источнику данных , пытаюсь сделать фильтр по combobox. как сделать не понятно, помогите пожалуйста разобраться !ниже выложил код
public IEnumerable<ProductModel> GetAllProduct()
{
ProductView viewfilter = new ProductView();
var productList = new List<ProductModel>();
using (var connection = new MySqlConnection(connectionString))
using (var command = new MySqlCommand())
{
connection.Open();
command.Connection = connection;
command.CommandText = @"SELECT sklad.id, sklad.name, sklad.qty, sklad.price, category.name, company.name, sklad.date FROM sklad
LEFT JOIN category ON sklad.categoryID = category.id
LEFT JOIN company ON company.id = sklad.companyID";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var productModel = new ProductModel();
productModel.ID = (int)reader[0];
productModel.Name = reader[1].ToString();
productModel.Qty = Convert.ToInt32(reader[2]);
productModel.Price = Convert.ToDouble(reader[3]);
productModel.Category = reader[4].ToString();
productModel.Company = reader[5].ToString();
productModel.Date = Convert.ToDateTime(reader[6]);
productList.Add(productModel);
var filterr = from product in productList where product.Category == viewfilter.comboBox2.Text.ToString() select product;
}
}
}
return productList;
}
combobox по которому нужно отфильтровать datagridview заполняется таким образом
public IEnumerable<CategoryModel> GetCategoryComboboxValue()
{
var categoryList = new List<CategoryModel>();
using (var connection = new MySqlConnection(connectionString))
using (var command = new MySqlCommand())
{
connection.Open();
command.Connection = connection;
command.CommandText = "SELECT category.id AS id, CONCAT(category.id, ' | ', category.name) as name FROM category";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var categoryModel = new CategoryModel();
categoryModel.Id = (int)reader[0];
categoryModel.Name = reader[1].ToString();
categoryList.Add(categoryModel);
}
}
}
return categoryList;
}
ProductModel:
private int id;
private string name;
private int qty;
private double price;
private string categoryID;
private string companyID;
private DateTime date;
// свойство поля (properties) VS проверки условия ввода данных (Validation или Валидация модели)
[DisplayName("Product_ID")]
public int ID
{
get { return id; }
set { id = value; }
}
[DisplayName("Product_Name")]
public string Name
{
get { return name; }
set { name = value; }
}
[DisplayName("Product_Qty")]
public int Qty
{
get { return qty; }
set { qty = value; }
}
[DisplayName ("Product_price")]
public double Price
{
get { return price; }
set { price = value; }
}
[DisplayName ("Product_Category")]
public string Category // categoryID заполняется данными combobox combobox заполняется из таблицы category
{
get { return categoryID; }
set { categoryID = value; }
}
[DisplayName ("Product_Company")]
[Required (ErrorMessage = "обязательно нужно выбирать название производителя товара")] // проверка выбора производителя товара
public string Company
{
get {return companyID; }
set { companyID = value; }
}
[DisplayName ("Date")]
public DateTime Date
{
get { return date; }
set { date = value; }
}
CategoryModel
public class CategoryAddModel
{
private int id;
private string name;
public int Id
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
}
Ответы (1 шт):
Автор решения: Евгений Нейфельд
→ Ссылка
Наверное так сортировка делается напрямую в гриде
``` bs = new BindingSource();
bs.DataSource = ВашаDataGrid.DataSource;
if (ВашаDataGrid.DataSource != bs)
{
bs.Filter = string.Format("[product.Category] LIKE '%{0}%', comboBox2.Text);
ВашаDataGrid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
Либо делать SQL запрос к базе, фильтровать и выводить уже отфильтрованные данные
SELECT product.name FROM product WHERE product.category" +comboBox2.Text
и потом выводить уже в грид
