简体   繁体   English

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

[英]How to add new item into listbox that using datasource?

I create a winform application that contains 3 textbox ( pcno , pcname and pcipadd ), one listbox that is using a datasource and one button to add new item. 我创建了一个winform应用程序,其中包含3个文本框( pcnopcnamepcipadd ),一个使用数据源的列表框和一个用于添加新项目的按钮。 I'm having a trouble to add an item to my listbox. 我在列表框中添加项目时遇到了麻烦。 I'm using this code on the add item button: 我在添加项目按钮上使用此代码:

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

The code above adds the new item successfully, but the selected item in the listbox also been updated. 上面的代码成功添加了新项目,但列表框中的所选项目也已更新。

In details, I currently have a "PCN01" on my listbox. 详细说明,我目前在列表框中有一个“PCN01”。 Then I go to my textbox ( pcno.text ) then write new value (example "PC02") and click the button to add item .What happens is the item is added but the "PC01" are also getting updated to "PC02". 然后我转到我的文本框( pcno.text ),然后写入新值(例如“PC02”),然后单击按钮添加项目。如果项目被添加,“PC01”也会更新为“PC02”。 After reloading the form (re-open) all change back to normal, "PC01" with its value and "PC02" with its value. 重新加载表格(重新打开)后,所有更改恢复正常,“PC01”及其值和“PC02”及其值。 I just don't want the selected item on the listbox getting update while adding the new item. 我只是不希望在添加新项目时列表框上的所选项目得到更新。 Any ideas? 有任何想法吗?

Ok, to put this simplly, this is what I'm trying to do, you can try it, if you add new item the selected item also getting updated: 好吧,简单地说,这就是我想要做的,你可以尝试一下,如果添加新项目,所选项目也会更新:

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

The problem is caused by TextBox databindings. 问题是由TextBox数据绑定引起的。

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

In that form DataSource is updated when you edit values in text boxes. 在该表单中,在文本框中编辑值时会更新DataSource。

You might consider changing those lines to: 您可以考虑将这些行更改为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM