0

我是 C# 新手。我有一个带有两个文本字段和一个按钮和一个数据网格视图的表单。我正在尝试将数据传递到业务逻辑层 (BLL) 并从那里传递到数据逻辑层 (DAL),然后我将其添加到列表中并将列表返回到表单并显示在数据网格视图上。问题是每次我添加新记录时,以前的记录都会消失。看起来列表中的前一个条目已被覆盖。我已经检查了列表中的计数保持在 1 的调试。谢谢

以下是我如何从表单调用 BLL 方法以在数据网格上显示:

   BLL_Customer bc = new BLL_Customer();
   dgvCustomer.DataSource = bc.BLL_Record_Customer(cust);

这是BLL中的课程

 namespace BLL
 {
     public class BLL_Customer
     {

         public List<Customer> BLL_Record_Customer(Customer cr)
         {
             DAL_Customer dcust = new DAL_Customer();
             List<Customer> clist = dcust.DAL_Record_Customer(cr); 
             return clist;  // Reurning List
         }
     }

 }

这是 DAL 中的类:

namespace DAL
 {

     public class DAL_Customer

     {
         List<Customer> clist = new List<Customer>();
         public List<Customer> DAL_Record_Customer(Customer cr)
         {
             clist.Add(cr);
             return clist;
         }
     }
 }
4

2 回答 2

2

每次尝试添加新记录时,您都在创建类实例。确保在任何类中只存在一个类实例。在函数外创建类的实例。

BLL_Customer bc = new BLL_Customer();


DAL_Customer dcust = new DAL_Customer();
于 2013-09-02T00:31:47.550 回答
0

这是正在发生的事情:

BLL_Customer bd = new BLL_Customer(); // Lets call this BLL_Customer #1
dgvCustomer.DataSource = bc.BLL_Record_Customer(cust); // Does what you expect

当再次调用此代码时:

BLL_Customer bd = new BLL_Customer(); // Lets call this BLL_Customer #2

旧列表和客户信息存储在 BLL_Customer #1 中。引用bd不再指向#1,而是指向#2。为了用代码解释这一点,我可以这样澄清:

var bd = new BLL_Customer().BLL_Record_Customer(cust); // A List<Customer> 
bd = new BLL_Customer().BLL_Record_Customer(cust); // A new List<Customer>

旁注: 每次DAL_Customer在应用程序中第一次使用该类时,您List<Customer>都会初始化为一个新值 - 在您的情况下new List<Customer>()

如果您不Customers以某种方式将信息持久化,无论是文件、数据库还是其他方式,每次加载应用程序时,您都会遇到新的问题List<Customer>

于 2013-09-02T00:34:35.607 回答