一尘不染

如何刷新列表框的数据源

c#

窗体具有一个组合框和一个列表框。单击“添加”按钮时,我想将选定的项从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();
    }
}

在此示例中,所选项目将替换为ListBox中的新选择。我需要将该项目添加到列表中。

我的代码有什么问题?


阅读 524

收藏
2020-05-19

共1个答案

一尘不染

listbox1.DataSource 属性会寻找值的更改,但是通过始终分配相同的列表,值不会真正更改。

您可以使用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);
    }
}
2020-05-19