如何连接适配器从视图到模型在MVP
本文关键字:视图 模型 MVP 适配器 何连接 连接 | 更新日期: 2023-09-27 18:04:10
我不知道该怎么做。我有点困惑,在我的项目c# winforms我使用MVP模式桌面应用程序。
我有datagridview,其中我显示产品gorup
。选择产品组的数据库查询存储在模型中,选择方法返回DataTable
。接下来,演示者调用该模型函数进行选择并将其传递给视图。考虑到我把DataTable
放在BindingSource
和gridview中作为数据源传递绑定源。
这个工作很好,但是当我尝试在网格中添加新行并尝试保存新行时怎么办?
如果我想编辑现有行并将该记录更新到数据库。
如果我想从数据库中create/update
记录,我需要访问适配器并调用update
。问题是因为我的适配器在model
而不是在view
。
我不知道如何从视图访问适配器和数据集到模型。
检查我的代码选择:
模型:
public DataTable SelectAll()
{
using (MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.ConnectionString))
{
try
{
conn.Open();
string query = "SELECT Naziv, Opis FROM grupe";
using (MySqlDataAdapter adapter = new MySqlDataAdapter(query, conn))
{
dt = new DataTable();
ds = new DataSet();
adapter.Fill(ds, "grupe");
dt = ds.Tables["grupe"];
}
conn.Close();
}
catch(MySqlException ex)
{
MessageBox.Show(ex.Message);
}
}
return dt;
}
推荐者:
public DataTable SelectAll()
{
return _model.SelectAll();
}
视图:
private void GrupeArtikala_Load(object sender, EventArgs e)
{
bs = new BindingSource();
bs.DataSource = _presenter.SelectAll();
groupDataGridView.DataSource = bs;
}
所以现在当我想保存更改到数据库,我需要访问模型数据库适配器,但我不知道如何。
private void saveToolStripButton_Click(object sender, EventArgs e)
{
changes = ds.GetChanges(); // DatSet changes is in model but i must access here but dont know how
if (changes != null)
{
int updatedRows = dataAdapter.Update(changes); // Adapter is in model and i need him here
ds.AcceptChanges();
}
}
我不知道如何将此连接到模型,以避免在视图表单中混合数据库查询。
任何人都可以给我示范一下。
如果我理解正确,您需要调用属于您的模型的对象上的函数,但您不希望您的视图有对您的模型的引用。对吗?如果是这样,您可以遵循使用SelectAll函数的模式:
bs.DataSource = _presenter.SelectAll();
您正在呼叫_presenter。在视图中SelectAll,但最终从模型中获取返回值。调用ds。你可以给你的演示器添加一个GetDataSetChanges函数:
public DataSet GetDataSetChanges()
{
return _model.GetDataSetChanges();
}
在适配器上调用update也是同样的事情。给演示器添加一个函数:
public int UpdateAdapter(DataSet dataSet)
{
return _model.UpdateAdapter(dataSet);
}