我可以将数据添加到数据库,但结果是我只能在重新启动程序后看到。如何使添加数据成为可能然后(立即等待)在数据网格的另一个窗口中看到它?
答案 0 :(得分:3)
我假设您正在将DataGrids Items属性绑定到您的数据,或类似的东西......您是否已在您持有数据的任何类中实现了INotifyPropertyChanged?这也假设你有一些方法告诉你的DataSource刷新它的数据。如果您要发出插入数据的SQL命令,并且您有一个TableAdapter或存储本地副本的东西,但是您没有告诉TableAdapter从数据库中刷新,那么您将永远不会看到您的更改。
这在使用MVVM时效果最佳,但您可以使其工作。实质上,您将PropertyChanged事件和处理程序添加到您的类。我通常在属性设置器中调用处理程序,以及在显式更改属性值的任何时候。
这告诉UI数据以某种方式发生了变化,并刷新了它的Views表示。
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
public class DemoCustomer : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
我也是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()
重新绑定数据。