我正在使用3-Tier体系结构设计C#Windows应用程序,基本上,我正在为超市创建管理系统,在该系统中,我已经创建了用于生成BILL的表格。我已经使用FlowLayout面板分别生成4个ComboBox,3个TextBox和2个Numeric UpDown来分别保存Bill值。我提供了添加按钮,通过它我们可以在每次单击按钮时动态创建这些控件,因此,例如,当用户单击添加按钮以添加新项时,将生成带有4个CB,3 TB和2个NUpDowns的新行。提到场景后,我有以下查询:
谢谢
我不知道您的应用程序的体系结构,但让我尝试为您提供帮助。假设您具有某种用于业务逻辑的“客户”,“产品”和“订单”对象,则工作流程如下
void ButtonFindCustomer_Click(object sender, EventArgs e)
{
m_order.Customer = Customer.Find(TextBoxFirst.Text, TextBoxLast.Text, TextBoxCustomerID.Text);
}
void ButtonAddProduct_Click(object sender, Event args)
{
m_order.AddArticle(Product.Find(TextBoxArticleNumber.Text), NumericUpDownArticleAmount.Value);
}
void ButtonSubmit_Click(object sender, EventArgs e)
{
m_order.Place();
}
我在这里使用成员变量的前缀只是为了清楚起见,因为缺少上下文。在实际代码中,应避免使用它。此外,我省略了用户是否存在于ButtonFindCustomer_Click中的检查,这种情况也应处理。在ButtonAddProduct_Click中,处理添加产品的情况。再次假设产品存在,因此您必须在此处引入一些错误处理,例如,使用类似
if(Product.Exists(productNumber))
{
// add to order
}
else
{
// emit error message
}
实际的事务在ButtonSubmit_Click处理程序中执行。该订单经过验证,然后发送到数据访问层(例如,写入SQL数据库)。再次缺少错误处理,请记住这一点。
要解决您的实际问题:
1)您将必须以某种方式跟踪您创建的控件。如果始终将它们创建在相同的组中,则应考虑使用用户控件,这样可以避免跟踪哪些控件属于同一组。控件可以-例如-包含类别的下拉框,产品的下拉框和金额的数字下拉框。
class ProductSelector : UserControl
{
... //add controls to user control
public event EventHandler CategoryChanged;
public event EventHandler ProductChanged;
...
public void PopulateCategories(list<string> names, list<string> ids)
{
...
}
public void PopulateProducts(list<string> names, list<string ids)
{
...
}
}
现在,有关产品的任何更改都将发生,您将收到一个事件,可以直接访问您的用户控件和所有必要的数据(如果您在ProductSelector中编写了函数)。如果要依次访问这些控件,则可以从MainForm.Controls中获取类型为ProductSelector的所有控件,也可以创建添加的所有ProductControl的列表。
2)是的,我认为您会接受这种方法的。您必须在某些地方访问BLL的功能,并且UI事件处理程序是一个不错的起点。
3)请看我对1)的回答。
希望我的解释满足您的要求并回答您的问题。随时问我是否可以为您提供进一步的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句