尝试将form2文本框绑定到form1 listview

时间:2012-05-28 15:35:53

标签: c# .net winforms data-binding

我有ListView的winform1并添加了按钮。当我按下添加按钮时,它会打开新的winform2,其中包含2个文本框,名称和姓氏以及保存按钮。 现在我想要的是当我按下保存时将这些值添加到listView。我的代码没有错误,但我的列表框不会更新。

以下是我的列表类的代码:

public class Person
{
    public string Name { get; set; }

    public string Surname { get; set; }
}

这是form2代码:

public partial class add : Form
{
    public add()
    {
        InitializeComponent();
    }

    Form1 f1 = new Form1();
    List<Person> People = new List<Person>();

    private void button1_Click(object sender, EventArgs e)
    {
        Person p = new Person();
        p.Name = textBox1.Text;
        p.Surname = textBox2.Text;
        People.Add(p);
        f2.listView1.Items.Add(p.Name + " " + p.Surname);
    }
}

现在问题是调试没有显示任何错误。我的listbox1没有更新,我不知道我做错了什么。

尝试使用f2.ShowDialog();然后它会在列表视图中显示添加的项目,但它会再次打开form1,当我添加新数据时,之前的数据将会丢失。任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

我确保Person表单中的add可供调用者Form1使用,这样当用户点击“确定”按钮时,您可以将该信息添加到列表视图。

为简单起见,我更改了我的版本以添加单个项目。我留给你了解如何对List<Person>进行相同的操作。

在代码中,看起来像这样:

public partial class add : Form
{
    // notice that we don't need a List, just a single item
    public Person person = new Person();

    public add()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.person.Name = this.nameTextBox.Text;
        this.person.Surname = this.surnameTextBox.Text;

        // the listView is only be updated if the changes were accepted
        // setting the result to OK will also close the dialog
        this.DialogResult = DialogResult.OK;
    }
}

Form1的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void addButton_Click(object sender, EventArgs e)
    {
        var add = new add();

        if (add.ShowDialog() == DialogResult.OK)
        {
            this.listView1.Items.Add(add.person.Name +
                                     " " + add.person.Surname);
        }
    }
}

答案 1 :(得分:0)

试试这个文本框:

public string textbox1_text
    {
        get { return textBox1.Text; }
        set { textBox1.Text = value; }
    }

使用这些代码加载新表单:

Form2 f2 = new Form2();
        f2.Owner = this;
        f2.Show();

答案 2 :(得分:0)

这段代码似乎错了:

f2.listView1.Items.Add(p.Name + " " + p.Surname); //Form2

也许你的意思是:

f1.Show();
f1.listView1.Items.Add(p.Name + " " + p.Surname); //Form1
//this.Close(); <-- if you want to close the form after show f1