c# - 如何刷新列表框的数据源

标签 c# .net winforms

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

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

我的代码有什么问题?

最佳答案

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

关于c# - 如何刷新列表框的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17615069/

相关文章:

c# - 如何更改datagridview 选定行的背景颜色?

c# - Winforms:如何正确打开组合框?

C# OpenXML 如何从 Cell 获取超链接

c# - 如何在 MVC 4 Controller 中获取客户端 IP 地址?

c# - 如何更改项目的 .NET Framework 版本?

c# - 以编程方式添加到 FlowLayoutPanel 的项目不像设计时那样对齐

c# - ILogger 的隐式范围

C# 访问 protected 字段

c# - 在 ASP.NET Identity 2 中哪里可以找到生成的 PasswordReset token ?

c# - 使用某些字符串时关闭 TextWriter 异常