代码之家  ›  专栏  ›  技术社区  ›  Ross

未显示添加到DataGridView的新记录

  •  0
  • Ross  · 技术社区  · 14 年前

    我有个习惯 Order 类,其中组存储在 List<Order> 和数据报视图。我认为问题出在我的实现中,下面是我如何使用它:

    在表格中附上 DataGridView (AS) 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);
    }
    

    从控制台可以看出,这是成功添加的。我以为数据报会在这之后自动更新,因为 Orders 已经改变了-我有什么东西不见了吗?

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

    4 回复  |  直到 14 年前
        1
  •  1
  •   Ross    14 年前

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

    1. 首先替换您的 List<T> 具有 BindingList<T> -基本上是一样的,除了 BindingList 表现得像 DataBind() .

    2. 改变你 T 实施 System.ComponentModel.INotifyPropertyChanged 以下内容:

    这涉及到添加属性:

    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 Collection , Info on converting List to BindingList

        2
  •  0
  •   Jamie Chapman    14 年前

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

        3
  •  0
  •   bbb    14 年前

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

    使用代码:

    OrdersDataGrid.DataSource = Orders;
    OrdersDataGrid.DataBind();
    
        4
  •  -1
  •   Nasser Hadjloo    14 年前

    您必须使用

    Gridview1.DataBind();
    

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

    如果您真的不想重新绑定您的项目,请使用.NET 3.5中提供的Ironpython。