【发布时间】:2020-09-03 21:09:32
【问题描述】:
我有两种形式,一种是控制台,您可以在其中添加客户和产品,另一种是商店 您可以在其中检查哪些客户在列表中,哪些产品,您还可以通过列表框将它们绑定到一个唯一的对象(购物车)中。我的问题是表单目前无法共享数据,所以我想知道如何。
我知道我可以使用数据库,但这只是练习,所以我想知道。
控制台有一个返回商店的按钮:
private void tornaAlloShopButton_Click(object sender, EventArgs e)
{
Shop Login = new Shop();
Login.Show();
this.Hide();
}
代码会很长,因为这些列表存储在列表中,在我的接口实现中,这是其中有列表的部分:
public class DBMemoryManager : DBManager
{
//Arrays
List<ClienteModel> MemoryClienti = new List<ClienteModel>();
List<ProdottoModel> MemoryProdotti = new List<ProdottoModel>();
List<CarrelloModel> MemoryCarrello = new List<CarrelloModel>();
这是控制台 form.cs的初始部分:
public partial class ConsoleAnagrafica : Form
{
//Istanziazione [0]
DBMemoryManager dbMemoryManager = null;
public ConsoleAnagrafica()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Istanziazione [1]
dbMemoryManager = new DBMemoryManager();
}
这是 shop 起始代码:
public partial class Shop : Form
{
//Istanziazione [0]
DBMemoryManager dbMemoryManager = null;
public Shop()
{
InitializeComponent();
}
private void Shop_Load(object sender, EventArgs e)
{
//Istanziazione [1]
dbMemoryManager = new DBMemoryManager();
}
这样我就可以回忆起我interface中的所有方法:
public interface DBManager
{
//Carrello
void CreateCarrello (CarrelloModel model);
List<CarrelloModel> ReadAllCarrello (CarrelloModel model);
//Cliente
bool CreateCliente(ClienteModel model);
void UpdateCliente(ClienteModel model);
void DeleteCliente(ClienteModel model);
List<ClienteModel> ReadAllCliente(ClienteModel model);
//Ordine
bool CreateProdotto(ProdottoModel model);
void UpdateProdotto(ProdottoModel model);
void DeleteProdotto(ProdottoModel model);
List<ProdottoModel> ReadAllProdotto(ProdottoModel model);
}
我用来更新商店的列表框的代码是:
private void aggiornaListeButton_Click(object sender, EventArgs e)
{
CarrelloModel carrelloModel = null;
carrelloModel = new CarrelloModel();
var memoryCarrello = dbMemoryManager.ReadAllCarrello(carrelloModel);
carrelloListBox.Items.Clear();
foreach (CarrelloModel model in memoryCarrello)
{
carrelloListBox.Items.Add(String.Format("{0} {1}", carrelloModel.RiferimentoIDCliente, carrelloModel.RiferimentoIDProdotto));
}
ClienteModel clienteModel = null;
clienteModel = new ClienteModel();
var memoryClienti = dbMemoryManager.ReadAllCliente(clienteModel);
clientiListBox.Items.Clear();
foreach (ClienteModel model in memoryClienti)
{
clientiListBox.Items.Add(String.Format("{0} {1} {2}", clienteModel.Cognome, clienteModel.Nome, clienteModel.Indirizzo));
}
ProdottoModel prodottoModel = null;
prodottoModel = new ProdottoModel();
var memoryProdotti = dbMemoryManager.ReadAllProdotto(prodottoModel);
prodottiListBox.Items.Clear();
foreach (ProdottoModel model in memoryProdotti)
{
prodottiListBox.Items.Add(String.Format("{0} {1}", prodottoModel.DescrizioneArticolo, prodottoModel.DataProdotto));
}
}
您可以看到的 ReadAll 方法都是相同的,但是每个方法都返回我的三个列表中的一个,因此我可以获取整个列表并根据需要使用它,这是一个示例:
public List<CarrelloModel> ReadAllCarrello(CarrelloModel model)
{
bool empty = !MemoryCarrello.Any();
if (empty)
{
MessageBox.Show("Carello vuoto");
}
else
{
MessageBox.Show("Testing");
}
return MemoryCarrello;
}
当我按下按钮返回商店并尝试更新列表时,这些列表是空的,因为商店无法访问控制台更新的列表,即使我使用 ReadAll 方法,这也应该是差异的原因实例,我该怎么办?我快疯了。提前致谢。
【问题讨论】:
-
Shop 类和 ConsoleAnagrafica 表单有两个不同的 DBManager 实例。您在其中一个实例中放入的内容不在另一个实例中。您需要传递单个 DBManager 实例(第一个创建的)并始终使用相同的实例。另一种选择是使 DBManager 成为静态类
-
因为我对 c# 还很陌生,所以我不知道如何为不同的表单提供相同的 DBManager 实例。我该怎么办?
-
顺便说一句,我不能让 DBManager 公开,因为那是一个接口,我也不能让 DBMemoryManager 成为静态的,因为我不会被允许使用我的方法。
标签: c# list forms methods interface