C# - 在两个表单之间传递数据(Windows窗体应用程序)

时间:2017-06-29 17:31:45

标签: c# winforms listview

我在C#Windows窗体应用程序中有一个项目,在我的项目中我有2个屏幕,1 - ListView显示数据,2 - Formulary获取信息并放在ListView上,主要问题是,将信息从Form2传递到Form 1中。

我的逻辑:

  • 从Form2上获取用户的信息并传递给其他类
  • 在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获取信息并传递给Form1 :(我获取信息并放入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的新手。

2 个答案:

答案 0 :(得分:0)

您在非Form类中有一个ListViewItem(一个Windows窗体项),这是不可取的,您应该使用List项。 此外,您只想在主窗体中创建EmployeeDAO对象,并通过后者的构造函数与Register Form共享它。另一种方法是使用Singleton模式。

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();
        }
    }
}

我希望这会有所帮助!!

答案 1 :(得分:0)

通过表单传递数据的主要思想是使控件的修改器公开使用,以便您可以以其他形式使用它然后就可以了 制作第二种形式和代码的对象,但无论如何看到这些链接,我希望它会帮助你

高级how to pass listview row data into another existing form
Accessing listview items from another form
c# Add listView items from another form