c# combobox заполнять по принципу MVP
пытаюсь написать приложение по паттерну MVP. пытаюсь понять, для заполнения контроллеров из разных таблиц базы данных нужно создать несколько моделей, объясните пожалуйста. допустим для одной формы для отображения данных в Datagridview создал один модель, в этой же форме нужно заполнять combobox данными из бд. почему-то не получается, объясните пожалуйста где ошибка моя. ниже выложил код. заранее извиняюсь, выложил весь код, чтоб понят где, что.
public class ProductModel
{
// поля
private int id;
private string name;
private int qty;
private int price;
private int categoryID;
private int companyID;
private DateTime date;
private string categoryValueName;
// свойство поля (properties)
public int Id
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Qty
{
get { return qty; }
set { qty = value; }
}
public int Price
{
get { return price; }
set { price = value; }
}
public int Category
{
get { return categoryID; }
set { categoryID = value; }
}
public int Company
{
get {return companyID; }
set { companyID = value; }
}
[DisplayName ("Date")]
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
новая модель для combobox
public partial class CategoryModel
{
private int CategoryID;
private string CategoryName;
public int Id
{
get { return CategoryID; }
set { CategoryID = value; }
}
public string Name
{
get { return CategoryName; }
set { CategoryName = value; }
}
}
public class ProductRepository : BaseRepository, IProductRepository
{
// конструкторы
public ProductRepository(string connectionString)
{
this.connectionString = connectionString;}
// Методы
public void Add(ProductModel productModel)
{}
public void Delete(int id)
{}
public void Edit(ProductModel productModel)
{}
public IEnumerable<ProductModel> GetAll()
{
var productList = new List<ProductModel>();
using (var connection = new MySqlConnection(connectionString))
using (var command = new MySqlCommand())
{
connection.Open();
command.Connection = connection;
command.CommandText = "SELECT * from sklad order by id desc";
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.ToInt32(reader[3]);
productModel.Category = Convert.ToInt32(reader[4]);
productModel.Company = Convert.ToInt32(reader[5]);
productModel.Date = (DateTime)reader[6];
productList.Add(productModel);
}
}
}
return productList;
}
public IEnumerable<CategoryModel> GetCategoryModel() // запрос в базу для комбобокс
{
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;
}
public interface IProductRepository
{
void Add(ProductModel productModel);
void Edit(ProductModel productModel);
void Delete(int id);
IEnumerable<ProductModel> GetAll(); // Интерфейс IEnumerable реализует перебор объектов (продуктов)
IEnumerable<ProductModel> GetValueForSearch(string value); // Интерфейс долже реализовать поиск товара
IEnumerable<CategoryModel> GetCategoryModel();
}
интерфейс view
public interface IProductView
{
// свойство поля (properties - fields)
string ProductId { get; set; }
string ProducttName { get; set; }
string ProductQty { get; set; }
string ProductPrice { get; set; }
string ProductCategory { get; set; }
string ProductCompany { get; set; }
string ProductDate { get; set; }
string SearchValue { get; set; }
string CategoryID { get; set; }
string CategoryName { get; set; }
// Events (методы обработчик событий при нажатие на кнопки)
event EventHandler SearchEvent;
event EventHandler AddNewEvent;
event EventHandler EditEvent;
event EventHandler DeleteEvent;
event EventHandler SaveEvent;
event EventHandler CancelEvent;
// Методы
void SetProductListBindingSource(BindingSource productList); // инкапцилурет источника данных для формы
void SetCategoryListBindingSource(BindingSource categoryList);
и форма
public partial class ProductView : Form, IProductView
{
// Конструктор
public ProductView()
{
InitializeComponent();
AssociateAndRaiseViewEvents();
// tabControlAdd.TabPages.Remove(tabPageAdd);
}
private void AssociateAndRaiseViewEvents() // вызов событий или еще что-то
{
//событие Поиска
btnSearch.Click += delegate { SearchEvent?.Invoke(this, EventArgs.Empty); };
SearchTextbox.KeyDown += (s, e) => {
if (e.KeyCode == Keys.Enter)
SearchEvent?.Invoke(this, EventArgs.Empty);};
}
// свойство
public string ProductId
{
get { return IdTextbox.Text; }
set { IdTextbox.Text = value; }
}
public string ProductQty
{
get { return QtyTextbox.Text; }
set { QtyTextbox.Text = value; }
}
public string ProductPrice
{
get { return PriceTextbox.Text; }
set { PriceTextbox.Text = value; }
}
public string ProductCategory
{
get { return comboBoxCategoryName.Text; }
set { comboBoxCategoryName.Text = value; }
}
public string ProductCompany
{
get { return comboBoxCompanyName.Text; }
set { comboBoxCompanyName.Text = value; }
}
public string ProductDate
{
get { return dateTimePicker1.Text; }
set { dateTimePicker1.Text = value; }
}
public string ProducttName
{
get { return NameTextbox.Text; }
set { NameTextbox.Text = value; }
}
public string SearchValue
{
get { return SearchTextbox.Text; }
set { SearchTextbox.Text = value; }
}
public string CategoryID
{
get {return comboBoxCategoryName.ValueMember; }
set { comboBoxCategoryName.ValueMember = value; }
}
public string CategoryName
{
get { return comboBoxCategoryName.DisplayMember; }
set { comboBoxCategoryName.DisplayMember = value; }
}
// Events - события
public event EventHandler SearchEvent;
public event EventHandler AddNewEvent;
public event EventHandler EditEvent;
public event EventHandler DeleteEvent;
public event EventHandler SaveEvent;
public event EventHandler CancelEvent;
// Методы
public void SetProductListBindingSource(BindingSource productList)
{
dataGridView1.DataSource = productList;
}
public void SetCategoryListBindingSource(BindingSource categoryList)
{
comboBoxCategoryName.DataSource = categoryList;
}
}