Обновление сетки данных из другой формы в wpf c # - PullRequest
0 голосов
/ 24 декабря 2010

В настоящее время я занимаюсь разработкой приложения на C # с использованием WPF.У меня есть 2 формы.Form1 имеет DataGrid, и мне нужно уметь с form2 обновить базу данных, а затем перезагрузить данные в сетку данных на form1.

Как я могу это сделать.Большое спасибо

Ответы [ 3 ]

1 голос
/ 24 декабря 2010

Вы можете использовать промежуточный класс для обмена уведомлениями с использованием событий.

Пример:

public static class ApplicationEvents
{
    public static event EventHandler DataChanged;

    public static void NotifyDataChanged()
    {
        EventHandler temp = DataChanged;
        if (temp != null)
        {
            temp(null, EventArgs.Empty);
        }
    }
}

Теперь, в Form1 * Load событии, вы можете зарегистрироваться на DataChanged событие.

void Form1_Load()
{
    ApplicationEvents.DataChanged += new EventHandler(ApplicationEvents_DataChanged);
}

void ApplicationEvents_DataChanged(object sender, EventArgs e)
{
    // Write code to update DataGrid
}

Так что, когда бы ни происходило это событие, Form1 знает, как обновить его DataGrid:

// Suppose in Form2, on a button click you want Form1 to update its DataGrid
// You just need to call NotifyDataChanged() method
void Form2_Button1_Click()
{
    ApplicationEvents.NotifyDataChanged();
}
0 голосов
/ 24 декабря 2010

Один путь будет, если вы выберете MVP,

Модель, которая содержит данные из базы данных и их связь с базой данных.

Презентатор, который отображает данные модели в представление..

Представление - представление данных пользовательского интерфейса (т. Е. Ur form1 и form2)

Оба этих представления должны использовать одну и ту же модель, которая имеет обновленные данные (когда форма 2 обновляет данные, онафактически обновляет модель и модель, затем обновляет данные в базе данных), докладчики для обоих представлений (разные докладчики, которые наблюдают за данными модели с помощью настраиваемой привязки / событий), уведомляются об обновленных данных, а затем они могут обновлять свои представления (используя привязку данных).

0 голосов
/ 24 декабря 2010

У вас есть много вариантов.

Один из вариантов - это иметь внутреннее / публичное свойство для вашей коллекции в Form1, в которой есть данные, связанные с сеткой данных.Когда вы сохраняете запись в базе данных в Form2, вызываете свойство в Form1 и добавляете / удаляете запись, и если у вас есть ObservableCollection, тогда она будет автоматически добавляться или удаляться из коллекции.Если вы обновляете запись, вам нужно будет найти ее в коллекции и обновить значения, и если у вас есть INotifyProperty для каждого свойства, тогда запись в вашей форме Form1 будет обновлена.

Другой вариант - использовать открытый / внутренний метод UpdateCustomer.в Form1, поэтому, когда вы сохраняете запись в Form2, вы вызываете Form1.UpdateCustomer (newCustomer), и Form1 позаботится о новом клиенте.

Мне лично нравится иметь делегата в Window1 UpateRecord (Customer updatedCustomer).Таким образом, вместо вызова свойства или метода вы будете вызывать делегат из любого окна и передавать новое значение в Window1.Таким образом, любая Форма может вызвать делегат и передать новую запись в форму.

Кстати, если вы используете MVVM, делегат / метод / свойство должно быть на ВМ.

...