Как добавить данные в базу данных и показать их в сетке данных без перезапуска программы? - PullRequest
1 голос
/ 07 декабря 2011

Я могу добавить данные в базу данных, но результат этого я вижу только после перезапуска моей программы. Как сделать возможным добавление данных, а затем (сразу. С ожиданием) увидеть их в другом окне с сеткой данных?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Я предполагаю, что вы привязываете свойство DataGrids Items к вашим данным или что-то в этом роде ... Вы реализовали INotifyPropertyChanged для любого класса, в котором хранятся ваши данные?Это также предполагает, что у вас есть какой-то способ сказать вашему DataSource обновить его данные.Если вы вводите команды SQL, которые вставляют данные, и у вас есть TableAdapter или что-то, что хранит вашу локальную копию, но вы не говорите TableAdapter обновить из базы данных, вы никогда не увидите свои изменения.

Это лучше всего работает при использовании MVVM, но вы можете заставить его работать иначе.По сути, вы добавляете событие PropertyChanged и обработчик в свой класс.Я обычно помещаю вызов обработчику в свой установщик свойств, а также всякий раз, когда я явно вносю изменения в значение свойств.

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

VB Пример

Public MyClass
Implements INotifyPropertyChanged

Public Event PropertyChanged As PropertyChangedEventHandler _
    Implements INotifyPropertyChanged.PropertyChanged

Protected Sub OnPropertyChanged(ByVal info As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
End Class

C # Пример

public class DemoCustomer  : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

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

ObservableCollection

Я также большой поклонник ObservableCollection.Если у вас есть средства, чтобы использовать его, я предлагаю это.Это IEnumerable и уже реализован INotifyCollectionChanged.

Разъяснение привязки данных

Допустим, у вас есть класс (назовите его MyData), который вы используете для хранения ваших данных, в данном случае aколлекция объектов Person (ObservableCollection People).Ваш XAML может выглядеть так.Это предполагает, что ваш класс MyData имеет конструктор по умолчанию для краткости.

<Window>
    <Window.Resources>
        <local:MyData x:key="mydata"/>
    </Window.Resources>
    <DataGrid DataContext="{StaticResource mydata}" ItemsSource="{Binding People}"/>
</Window>

Таким образом, DataContext описывает местоположение данных, а ItemsSource сообщает, что с ним должен делать элемент управления.

Код Статья проекта, касающаяся привязки DataGrid к данным TableAdapter.

0 голосов
/ 07 декабря 2011

При добавлении данных в базу данных используйте myDataGrid.DataBind() для повторной привязки данных.

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