如何将数据添加到数据库并在数据网格中显示它而无需重新启动程序?

时间:2011-12-07 16:41:24

标签: c# sql-server wpf

我可以将数据添加到数据库,但结果是我只能在重新启动程序后看到。如何使添加数据成为可能然后(立即等待)在数据网格的另一个窗口中看到它?

2 个答案:

答案 0 :(得分:3)

我假设您正在将DataGrids Items属性绑定到您的数据,或类似的东西......您是否已在您持有数据的任何类中实现了INotifyPropertyChanged?这也假设你有一些方法告诉你的DataSource刷新它的数据。如果您要发出插入数据的SQL命令,并且您有一个TableAdapter或存储本地副本的东西,但是您没有告诉TableAdapter从数据库中刷新,那么您将永远不会看到您的更改。

这在使用MVVM时效果最佳,但您可以使其工作。实质上,您将PropertyChanged事件和处理程序添加到您的类。我通常在属性设置器中调用处理程序,以及在显式更改属性值的任何时候。

这告诉UI数据以某种方式发生了变化,并刷新了它的Views表示。

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),在本例中是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正在告诉控件应该用它做什么。

Code Project article dealing with databinding DataGrid to TableAdapter data.

答案 1 :(得分:0)

将数据添加到数据库时,使用myDataGrid.DataBind()重新绑定数据。