Winforms 不会显示添加到DataGridView的新记录

Winforms 不会显示添加到DataGridView的新记录,winforms,datagridview,Winforms,Datagridview,我有一个自定义的Order类,其中的组存储在List和DataGridView中。我认为问题出在我的实现中,下面是我如何使用它: 以OrdersDataGridView作为OrdersDataGrid封装的形式: 从控制台上看,这是成功添加的。我以为DataGrid会在这之后自动更新,因为订单发生了变化-我有什么遗漏吗 DataGrid接受该类,因为它从成员中生成列。您需要在DataGrid上重新绑定数据。在更新基础数据源后,是否应该重新绑定DataGrid 使用以下代码: OrdersData

我有一个自定义的Order类,其中的组存储在List和DataGridView中。我认为问题出在我的实现中,下面是我如何使用它:

以OrdersDataGridView作为OrdersDataGrid封装的形式:

从控制台上看,这是成功添加的。我以为DataGrid会在这之后自动更新,因为订单发生了变化-我有什么遗漏吗


DataGrid接受该类,因为它从成员中生成列。

您需要在DataGrid上重新绑定数据。

在更新基础数据源后,是否应该重新绑定DataGrid

使用以下代码:

OrdersDataGrid.DataSource = Orders;
OrdersDataGrid.DataBind();

由于不能在使用对象列表作为数据源的DataGridView上使用DataBind,因此我找到了解决方案:

首先用BindingList替换列表-本质上是一样的,只是BindingList的行为类似于数据绑定

更改T以实现System.ComponentModel.InotifyProperty更改:

这涉及到添加一个属性:

public event PropertyChangedEventHandler PropertyChanged;
添加到每个变量的集合块:

以及增加另一种方法:

private void NotifyPropertyChanged(string name)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

来源:,

您必须使用

Gridview1.DataBind();
请注意,每当您更新绑定到gridview或任何其他presenter列表控件的某些列表时,它只更新列表而不是gridview


如果您确实不想重新绑定项目,请使用.net 3.5中提供的IronPython,我查找了DataBind,但它似乎不存在于DataGridView中。DataBind是ASP.net特有的。问题是关于WinForms。
public string Name
{
    get { return this.CustomerName; }
    set {
        this.CustomerName = value;
        this.NotifyPropertyChanged("Name");
    }
}
private void NotifyPropertyChanged(string name)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}
Gridview1.DataBind();