Form有一个Combobox和一个ListBox.单击"添加"按钮时,我想将选定的项目从ComboBox添加到ListBox.
public partial class MyForm:Form
{
List<MyData> data = new List<MyData>();
private void ShowData()
{
listBox1.DataSource = data;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";
}
private void buttonAddData_Click(object sender, EventArgs e)
{
var selection = (MyData)comboBox1.SelectedItem;
data.Add(selection);
ShowData();
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,所选项目将替换为ListBox中的新选择.我需要将项目添加到列表中.
我的代码出了什么问题?
dwo*_*sch 68
listbox1.DataSource 属性查找值更改,但通过分配相同的列表,值不会真正更改.
您可以使用a BindingList<T>而不是您List<T>自动识别添加的新项目.您的ShowData()方法必须在启动时调用一次.
public partial class MyForm:Form
{
public MyForm(){
InitializeComponent();
ShowData();
}
BindingList<MyData> data = new BindingList<MyData>();
private void ShowData()
{
listBox1.DataSource = data;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";
}
private void buttonAddData_Click(object sender, EventArgs e)
{
var selection = (MyData)comboBox1.SelectedItem;
data.Add(selection);
}
}
Run Code Online (Sandbox Code Playgroud)
gza*_*axx 27
我建议使用,BindingSource因为它会正确更新连接的控件.
public partial class MyForm : Form
{
List<MyData> data = new List<MyData>();
BindingSource bs = new BindingSource();
public MyForm()
{
IntializeComponents();
bs.DataSource = data;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";
listBox1.DataSource = bs;
}
private void buttonAddData_Click(object sender, EventArgs e)
{
var selection = (MyData)comboBox1.SelectedItem;
data.Add(selection);
bs.ResetBindings(false);
}
}
Run Code Online (Sandbox Code Playgroud)
在飞行中更改控件数据源有时会产生奇怪的结果.
raj*_*azo 17
列表框未检测到您已更改DataSource.它只会在Datasource更改后刷新,因此DataSource首先设置为null:
listBox1.DataSource = null;
listBox1.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
您还可以清除项目,然后再次设置DataSource:
listBox1.Items.Clear();
listBox1.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86895 次 |
| 最近记录: |