如何使用数据源将新项添加到列表框中?

时间:2013-02-19 13:19:22

标签: c# listbox datasource add

我创建了一个winform应用程序,其中包含3个文本框(pcnopcnamepcipadd),一个使用数据源的列表框和一个用于添加新项目的按钮。我在列表框中添加项目时遇到了麻烦。我在添加项目按钮上使用此代码:

_pcno.Add(new PCNo() { PCNO = pcno.Text, 
                       PCNAME = pcname.Text, 
                       IPADDRESS = pcipadd.Text });

上面的代码成功添加了新项目,但列表框中的所选项目也已更新。

详细说来,我目前在列表框中有一个“PCN01”。然后我转到我的文本框(pcno.text),然后写入新值(例如“PC02”),然后单击按钮添加项目。如果项目已添加,但“PC01”也会更新为“PC02” ”。重新加载表格(重新打开)后,所有更改恢复正常,“PC01”及其值和“PC02”及其值。我只是不希望在添加新项目时列表框上的所选项目得到更新。有什么想法吗?

好的,简单地说,这就是我想要做的,你可以尝试一下,如果添加新项目,所选项目也会更新:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace PCListing
{
public partial class Form1 : Form
{
    private BindingList<mylist> _pcno;

    private ListBox listBox1;
    private TextBox pcno;
    private TextBox pcname;
    private Button btnAdd;

    public Form1()
    {
        InitializeComponent();

        FlowLayoutPanel layout = new FlowLayoutPanel();
        layout.Dock = DockStyle.Fill;
        Controls.Add(layout);

        listBox1 = new ListBox();
        layout.Controls.Add(listBox1);

        pcno = new TextBox();
        layout.Controls.Add(pcno);

        pcname = new TextBox();
        layout.Controls.Add(pcname);

        btnAdd = new Button();
        btnAdd.Click += btnAdd_Click;
        btnAdd.Text = "Add Item";
        layout.Controls.Add(btnAdd);

        Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _pcno = new BindingList<mylist>();
        _pcno.Add(new mylist() { pcno = "1", pcname = "PC01" });
        _pcno.Add(new mylist() { pcno = "2", pcname = "PC02" });

        listBox1.DisplayMember = "pcno";
        listBox1.DataSource = _pcno;
        pcno.DataBindings.Add("Text", _pcno, "pcno");
        pcname.DataBindings.Add("Text", _pcno, "pcname");
    }

    private void btnAdd_Click(object sender, EventArgs e)
    {
            _pcno.Add(new mylist() { pcno =pcno.Text, pcname = pcname.Text });
    }
    public class mylist
    {
        public string pcname { get; set; }
        public string pcno { get; set; }
    }
}
}

1 个答案:

答案 0 :(得分:2)

问题是由TextBox数据绑定引起的。

pcno.DataBindings.Add("Text", _pcno, "pcno");
pcname.DataBindings.Add("Text", _pcno, "pcname");

在该表单中,在文本框中编辑值时会更新DataSource。

您可以考虑将这些行更改为:

pcno.DataBindings.Add("Text", _pcno, "pcno", false, DataSourceUpdateMode.Never);
pcname.DataBindings.Add("Text", _pcno, "pcname", false, DataSourceUpdateMode.Never);