2017-06-29 88 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公佈前申報項目。在深入研究代碼之前,你應該學會更多。如果這對我的回答有幫助,請將其標記爲正確答案。 –

相關問題