我创建了一个winform应用程序,其中包含3个文本框(pcno
,pcname
和pcipadd
),一个使用数据源的列表框和一个用于添加新项目的按钮。我在列表框中添加项目时遇到了麻烦。我在添加项目按钮上使用此代码:
_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; }
}
}
}
答案 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);