2017-06-29 118 views
-2

我在C#窗体应用程序中有一个项目,在我的项目中我有2个屏幕,1 - 用于显示数据的ListView,2 - 获取信息并将ListView ,主要问题是将信息从Form2传递给Form1。C# - 在两个窗体之间传递数据(Windows窗体应用程序)

我的逻辑:

  • 获取对窗体2从用户信息传递给其他类
  • 在Form1上与其他类获取信息,并添加ListView控件

问题:

  • 对象种类ListViewItem返回null

窗体2:从表获取信息

namespace Company 
{ 
    public partial class Register : Form 
    { 
     EmployeeDAO employeeDAO = new EmployeeDAO(); 

     public Register() 
     { 
      InitializeComponent(); 
     } 

     private void btnRegister_Click(object sender, EventArgs e) 
     { 
      Employee employee = new Employee(); 
      employee.idEmployee = Convert.ToInt16(this.txtId.Text); 
      employee.nameEmployee = this.txtName.Text; 
      employeeDAO.insert(employee); 

     } 

    } 
} 

我班DAO从Form2的获取信息,并传递到Form 1:(我得到的信息,并把一个ListViewItem并将其返回)

namespace Company 
{ 
    class EmployeeDAO 
    { 
     ListViewItem item = new ListViewItem(); 

     public void insert(Employee employee) 
     { 
      string id; 
      string name; 
      id = Convert.ToString(employee.idEmployee); 
      name = employee.nameEmployee; 
      String[] row = { id, name }; 
      item = new ListViewItem(row); 
     } 

     public ListViewItem read() 
     { 
      //This item are returning null 
      return item; 
     } 
    } 
} 

Form1显示ListView上的数据:(我得到ListViewItem对象并添加到ListView)

namespace Company 
{ 
    public partial class Main : Form 
    { 

     public Main() 
     { 
      InitializeComponent(); 
      lstEmployee.View = View.Details; 
      lstEmployee.FullRowSelect = true; 
      lstEmployee.Columns.Add("ID", 150); 
      lstEmployee.Columns.Add("Nome", 150); 
      insert(); 
     } 

     private void insert() 
     { 
      EmployeeDAO employeeDAO = new EmployeeDAO(); 
      ListViewItem item = employeeDAO.read(); 
      if (item == null) 
      { 
       //Always this block run 
       MessageBox.Show("No Item"); 
       return; 
      } 
      else 
      { 
       MessageBox.Show("Item"); 
       lstEmployee.Items.Add(item); 
      }    
     } 

     private void btnRegister_Click(object sender, EventArgs e) 
     { 
      Register register = new Register(); 
      register.Show(); 
      this.Hide(); 
     } 
    } 
} 

有人可以解释如何做到这一点,如果是正确的方法? PS:在C#和OO上的新增功能。

回答

0

在非Form类中有一个ListViewItem(一个Windows Form项目),这不是要走的路,你应该有List项目。 此外,您还想创建只在主窗体中的EmployeeDAO对象,并通过后者的构造函数与注册表单共享。另一种方法是使用Singleton Pattern。

namespace Company 
{ 
    public partial class Register : Form 
    { 
     EmployeeDAO employeeDAO; 

     public Register(EmployeeDAO employeeDAO) 
     { 
      InitializeComponent(); 
      this.employeeDAO = employeeDAO; 
     } 

     private void btnRegister_Click(object sender, EventArgs e) 
     { 
      Employee employee = new Employee(); 
      employee.idEmployee = Convert.ToInt16(this.txtId.Text); 
      employee.nameEmployee = this.txtName.Text; 
      employeeDAO.insert(employee); 

     } 

    } 
} 

namespace Company 
{ 
    class EmployeeDAO 
    { 
     List<Employee> Items {get; private set;} 

     public EmployeeDAO() 
     { 
      Items = new List<Employee>(); 
     } 

     public void insert(Employee employee) 
     { 
      Items.Add(employee); 
     } 
    } 
} 

namespace Company 
{ 
    public partial class Main : Form 
    { 
     EmployeeDAO employeeDAO; 
     public Main() 
     { 
      InitializeComponent(); 
      lstEmployee.View = View.Details; 
      lstEmployee.FullRowSelect = true; 
      lstEmployee.Columns.Add("ID", 150); 
      lstEmployee.Columns.Add("Nome", 150); 
      employeeDAO = new EmployeeDAO(); 

     } 

     private void InsertEmployeesInListBox() 
     { 
      lstEmployee.Items.Clear(); 
      foreach (var item in employeeDAO.Items) 
      { 
       string[] row = { item.idEmployee.ToString(), item.nameEmployee }; 
       var listViewItem = new ListViewItem(row); 
       lstEmployee.Items.Add(listViewItem); 
      } 

     } 

     private void btnRegister_Click(object sender, EventArgs e) 
     { 
      Register register = new Register(employeeDAO); 
      register.Show(); 
      this.Hide(); 
     } 
    } 
} 

我希望这有助于!

+0

我有一些疑问,为什么注册需要一个'EmployeeDAO'对象作为参数?我不能以'Main'的形式访问'foreach'上的'Items'?它还没有工作 –

+0

因为每当您创建新实例时,EmployeeDAO都会设置一个新的员工列表。因此,不要使用空的Employee列表创建一个新的EmployeeDAO,而是将您创建的第一个EmployeeDAO传递给其他类,并将已有的数据列表重用到已有的员工列表。在班级EmployeeDAO公布前申报项目。在深入研究代码之前,你应该学会更多。如果这对我的回答有帮助,请将其标记为正确答案。 –

相关问题