Winforms 将对象列表传递给主窗体

Winforms 将对象列表传递给主窗体,winforms,listview,arraylist,Winforms,Listview,Arraylist,我有一个主窗体Form1,在运行应用程序时打开。我将此表单中包含供应商对象的列表传递给辅助表单2,以帮助我使用存储在表单1中的供应商列表中的对象属性构建产品对象 在Form2中,我有一个产品对象列表,在我完成它并在ListView中显示它之后,我希望将其传递回Form1。但是有些东西不起作用,我不知道是什么。先谢谢你 表格1: public partial class Form1 : Form { public ArrayList suplist = new ArrayL

我有一个主窗体Form1,在运行应用程序时打开。我将此表单中包含供应商对象的列表传递给辅助表单2,以帮助我使用存储在表单1中的供应商列表中的对象属性构建产品对象

在Form2中,我有一个产品对象列表,在我完成它并在ListView中显示它之后,我希望将其传递回Form1。但是有些东西不起作用,我不知道是什么。先谢谢你

表格1:

public partial class Form1 : Form
    {
        public ArrayList suplist = new ArrayList(); //suppliers list
        public List<Product> productlist = new List<Product>(); //products list which will be populated with objects sent from Form2


    public Form1()
    {
        InitializeComponent();

        //Read Suppliers from txt
        StreamReader sr = new StreamReader("Suppliers.txt");
        string linie = null;
        while((linie=sr.ReadLine())!=null) {
            try
            {
                int id = Convert.ToInt32(linie.Trim().Split(',')[0]);
                string nume = linie.Trim().Split(',')[1];

                Supplier sp = new Supplier(id, nume);
                suplist.Add(sp);
            }
            catch(Exception ex) { MessageBox.Show(ex.Message); }
        }

        listView1.Columns.Add("ID");
        listView1.Columns.Add("Nume");
        listView1.Columns.Add("Units");
        listView1.Columns.Add("Price");
        listView1.Columns.Add("SUpplier Id");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 from = new Form2(suplist);
        from.ShowDialog();
    }

    public List<Product> ProductList
    {
        get { return productlist; }
        set { productlist = value; }
    }



      private void button2_Click(object sender, EventArgs e)
        { //this function is supposed to populate listview with the productlist objects when i click the button;
//not sure if it is wrong writeed, or passing the list of products created in Form2 failed
            foreach (Product p in productlist)
            {
                //listView1.Items.Add(p.Id);
                ListViewItem itm = new ListViewItem(p.Id.ToString());
                itm.SubItems.Add(p.Nume);
                itm.SubItems.Add(p.Units.ToString());
                itm.SubItems.Add(p.Price.ToString());
                itm.SubItems.Add(p.SupplierId.ToString());

            }
        }
    }
公共部分类表单1:表单
{
public ArrayList suplist=新建ArrayList();//供应商列表
public List productlist=new List();//将使用从Form2发送的对象填充的产品列表
公共表格1()
{
初始化组件();
//从txt中读取供应商
StreamReader sr=新的StreamReader(“Suppliers.txt”);
字符串linie=null;
而((linie=sr.ReadLine())!=null){
尝试
{
int id=Convert.ToInt32(linie.Trim().Split(',')[0]);
字符串nume=linie.Trim().Split(',')[1];
供应商sp=新供应商(id,nume);
添加(sp);
}
catch(Exception ex){MessageBox.Show(ex.Message);}
}
listView1.Columns.Add(“ID”);
listView1.Columns.Add(“Nume”);
列表视图1.列。添加(“单位”);
listView1.Columns.Add(“价格”);
listView1.Columns.Add(“供应商Id”);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Form2 from=新的Form2(suplist);
from.ShowDialog();
}
公共列表产品列表
{
获取{return productlist;}
设置{productlist=value;}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{//当我单击按钮时,这个函数应该用productlist对象填充listview;
//不确定是否写入错误,或者传递在Form2中创建的产品列表失败
foreach(产品列表中的产品p)
{
//listView1.Items.Add(p.Id);
ListViewItem itm=新的ListViewItem(p.Id.ToString());
itm.子项。添加(p.Nume);
添加(p.Units.ToString());
添加(p.Price.ToString());
添加(p.SupplierId.ToString());
}
}
}
表格2:

    public partial class Form2 : Form
        {
            public List<Product> prodList = new List<Product>(); //list which stores the Products == > the list i want to send back to Form 1 
        public ArrayList supplierList = new ArrayList(); //list of suppliers received from From 1, used to build Products objects


    public Form2(ArrayList suplist)
    {
        InitializeComponent();
        supplierList = suplist;

        foreach(Supplier s in supplierList)
        {
            comboBox1_supID.Items.Add(s.Id);
        }

        Product p1 = new Product(1, "Cola", 4, 45, 1);
        Product p2 = new Product(2, "Fanta", 32, 22, 2);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1__id.Text == "") errorProvider1.SetError(textBox1__id, "Introduceti id");
        else if (textBox2_nume.Text == "") errorProvider1.SetError(textBox2_nume, "Introduceti numele");
        else if (textBox3_units.Text == "") errorProvider1.SetError(textBox3_units, "Introduceti units");
        else if (textBox4_price.Text == "") errorProvider1.SetError(textBox4_price, "enter price");
        else if (comboBox1_supID.Text == "") errorProvider1.SetError(comboBox1_supID, "Select sup id");
        else 
            try
            {
                int id = Convert.ToInt32(textBox1__id.Text);
                string nume = textBox2_nume.Text;
                int units = Convert.ToInt32(textBox3_units.Text);
                double price = Convert.ToDouble(textBox4_price.Text);
                int supid = Convert.ToInt32(comboBox1_supID.Text);

                Product pd = new Product(id, nume, units, price, supid);
                prodList.Add(pd);
                MessageBox.Show("Produs adaugat cu succes");

            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                textBox1__id.Clear();
                textBox2_nume.Clear();
                textBox4_price.Clear();
                textBox3_units.Clear();
                errorProvider1.Clear();
            }
    }

    private void textBox4_price_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit(e.KeyChar))
        {
            errorProvider1.SetError(textBox4_price, "Introduceti numai cifre");
        }
        else errorProvider1.Clear();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form1 frm = new Form1();
        frm.productlist = prodList;
        frm.Show();
    }
}
公共部分类表单2:表单
{
public List prodList=new List();//存储产品的列表==>我要发送回表单1的列表
public ArrayList supplierList=new ArrayList();//从1接收的供应商列表,用于生成产品对象
公共表格2(ArrayList suplist)
{
初始化组件();
供应商列表=供应商列表;
foreach(供应商列表中的供应商)
{
comboBox1_supID.Items.Add(s.Id);
}
产品p1=新产品(1,“可乐”,4,45,1);
产品p2=新产品(2,“芬达”,32,22,2);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
如果(textBox1_uuid.Text==“”)errorProvider1.SetError(textBox1_uid,“Introducti id”);
else if(textBox2_nume.Text==“”)errorProvider1.SetError(textBox2_nume,“introducti numele”);
else if(textBox3_units.Text==“”)errorProvider1.SetError(textBox3_units,“introducti units”);
else if(textBox4_price.Text==“”)errorProvider1.SetError(textBox4_price,“输入价格”);
else if(comboBox1_supID.Text==“”)errorProvider1.SetError(comboBox1_supID,“选择sup id”);
其他的
尝试
{
int id=Convert.ToInt32(textBox1\uu id.Text);
字符串nume=textBox2_nume.Text;
int units=转换为32(textBox3_units.Text);
double price=Convert.ToDouble(textBox4\u price.Text);
int supid=Convert.ToInt32(comboBox1\u supid.Text);
产品pd=新产品(id、nume、单位、价格、supid);
产品列表。添加(pd);
MessageBox.Show(“Produs adaugat cu Success”);
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
最后
{
textBox1__id.Clear();
textBox2_nume.Clear();
textBox4_price.Clear();
textBox3_units.Clear();
errorProvider1.Clear();
}
}
private void textBox4_price_KeyPress(对象发送者,KeyPressEventArgs e)
{
如果(!char.IsDigit(e.KeyChar))
{
errorProvider1.SetError(文本框4_price,“介绍价格”);
}
else errorProvider1.Clear();
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
Form1 frm=新Form1();
frm.productlist=prodList;
frm.Show();
}
}
我想从Form2发送到Form1 prodList(我猜是在Form1中存储在productlist中),并在Form1的listview1中显示它们


简言之,在表格1中,我创建供应商,将其存储在suplist中,并将此列表传递给表格2(在supplierlist中)。在Form2中,我创建产品,将其存储在prodList中,并将其传递给Form1(在productList中)。为什么不工作?为什么listview没有显示任何内容???

我还没有处理listview对象本身,但我认为您没有将创建的ListViewItem添加到listview中

foreach (Product p in productList)
{
   ListViewItem itm = new ListViewItem(p.Id.ToString());
   itm.SubItems.Add(p.Nume);
   itm.SubItems.Add(p.Units.ToString());
   itm.SubItems.Add(p.Price.ToString());
   itm.SubItems.Add(p.SupplierId.ToString());

   listView1.Items.Add(itm);
}

天哪,我真不敢相信我忘了这件简单的事。也许我太累了,我认为我没有正确通过这个名单。非常感谢!!!!!!你救了我一天