不显示添加到DataGridView的新记录

时间:2010-03-12 13:28:37

标签: winforms datagridview

我有一个自定义Order类,其中的一组存储在List<Order>和一个DataGridView中。我认为问题在于我的实现,所以这就是我如何使用它:

在封闭DataGridView(作为OrdersDataGrid)的表单中:

public partial class MainForm : Form
{

    public static List<Order> Orders;

    public MainForm()
    {
        // code to populate Orders with values, otherwise sets Orders to new List<Order>();
        OrdersDataGrid.DataSource = Orders;
    }

然后以另一种形式添加订单:

// Save event
public void Save(object sender, EventArgs e) {
    Order order = BuildOrder(); // method that constructs an order object from form data
    MainForm.Orders.Add(order);
}

从控制台我可以看出,这是成功添加的。我认为DataGrid会在Orders发生变化之后自动更新 - 我有什么遗漏吗?

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

4 个答案:

答案 0 :(得分:1)

由于你不能在使用对象列表的DataGridView上使用DataBind,因为它的DataSource是我找到的解决方案:

  1. 首先将List<T>替换为BindingList<T> - 基本上是相同的,除了BindingList行为,如DataBind()

  2. 将您的T更改为实施System.ComponentModel.INotifyPropertyChanged

  3. 这涉及添加属性:

    public event PropertyChangedEventHandler PropertyChanged;
    

    添加到每个变量的set块:

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

    来源:Binding a DataGridView to a CollectionInfo on converting List to BindingList

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在基础数据源更新后,您不应该重新绑定DataGrid吗?

使用代码:

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

答案 3 :(得分:-1)

您必须使用

将新数据绑定到数据网格
Gridview1.DataBind();

请注意,每当您更新某个列表(绑定到gridview或任何其他演示者列表控件)时,它只会更新列表而不是gridview。

如果您真的不想重新使用.net 3.5中提供的物品使用IronPython