如何使用数据源将新项目添加到列表框中? [英] How to add new item into listbox that using datasource?

查看:167
本文介绍了如何使用数据源将新项目添加到列表框中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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. 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.

详细信息,我当前在列表框中有一个"PCN01".然后我进入文本框(pcno.text),然后输入新值(例如"PC02")并单击按钮添加项目.发生的事情是添加了项目,但"PC01"也已更新为"PC02".重新加载表单(重新打开)后,所有内容均恢复为正常,其值更改为"PC01",其值更改为"PC02".我只是不希望添加新项目时在列表框中选择的项目得到更新.有什么想法吗?

In details, I currently have a "PCN01" on my listbox. 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". After reloading the form (re-open) all change back to normal, "PC01" with its value and "PC02" with its value. 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; }
    }
}
}

推荐答案

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

The problem is caused by TextBox databindings.

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.

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

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

这篇关于如何使用数据源将新项目添加到列表框中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆