Новые записи, добавленные в DataGridView, не отображаются - PullRequest
0 голосов
/ 12 марта 2010

У меня есть собственный класс 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 ]

1 голос
/ 13 марта 2010

Поскольку вы не можете использовать DataBind для DataGridView, который использует список объектов в качестве источника данных, вот решение, которое я нашел для этого:

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

Источники: Привязка DataGridView к коллекции , Информация о преобразовании List в BindingList

0 голосов
/ 13 марта 2010

Вы должны привязать новые данные к вашей сетке данных, используя

Gridview1.DataBind();

обратите внимание, что всякий раз, когда вы обновляете какой-либо список, связанный с сеткой или любым другим элементом управления списком презентаторов, он просто обновляет список, а не сетку.

, если вы действительно не любите перепривязывать свой Предмет, используйте IronPython, предоставленный в .net 3.5

0 голосов
/ 12 марта 2010

Не следует ли перепривязать DataGrid после обновления базового источника данных?

Используйте код:

OrdersDataGrid.DataSource = Orders;
OrdersDataGrid.DataBind();
0 голосов
/ 12 марта 2010

Вам необходимо перепривязать данные в вашей DataGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...