我正在基于Access数据库创建一个WPF项目.
该数据库有两个表:
- tblMovies (MovieID: PK, Title, Director, Genre etc)
- tblActors (ActorID: PK, MovieID: FK, Firstname, Lastname etc)
我有列表框,我可以看到所有的电影,如果我点击一个,它会显示一个新窗口,其中包含有关该电影的所有详细信息:标题,导演,流派,还有演员.
在这个窗口中,我添加了一个按钮来创建一个新的actor.这将打开一个新窗口,您可以在其中输入MovieID(FK)和有关actor的信息.
当我单击保存更改时,它可以工作,窗口关闭,但我的listboxActors需要手动刷新(我已添加了一个按钮)以查看新的actor.
在我点击其他窗口中的“保存更改”后,有没有办法刷新我的listboxActors?
我首先通过关闭我的第一个屏幕来点击添加新演员,然后如果我保存它将重新打开屏幕,它会自动刷新,但我不希望这样.
我的listboxActors:
listBoxActors.ItemsSource = mov.Actors;
保存按钮(在另一个屏幕中)
private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
{
Actor act = new Actor();
act.MovieID = Convert.ToInt32(textBoxMovieID.Text);
act.FirstName = textBoxFirstName.Text;
act.LastName = textBoxLastName.Text;
act.Country = textBoxCountry.Text;
act.Born = Convert.ToDateTime(BornDate.SelectedDate);
act.Bio = textBoxBio.Text;
ActorRepository.AddActor(act);
MessageBox.Show("The actor: " + act.FirstName + " " + act.LastName + " has been created");
this.Hide();
}
刷新按钮:
private void buttonRefresh_Click(object sender, RoutedEventArgs e)
{
listBoxActors.ItemsSource = null;
listBoxActors.ItemsSource = mov.Actors;
}
提前致谢!
解决方法:
好的,谢谢你的解释性评论……!我有一个建议,请告诉我这是否有助于您编写场景代码:
所以你有两个窗体WindowShowDetails让它成为主窗体,WindowAddActor是子窗口,它们将是主窗体中打开子窗体的按钮,你在子窗口做一些任务并按下保存按钮,这将保存这些细节并关闭该表单.并且您希望在与此事件关联的主窗体中刷新List.为此你可以使用委托和事件;为此你必须在主要形式和孩子中完成许多任务,让我告诉你它如何帮助你:
>在主窗体中定义委托:
public delegate void RefreshList();
>定义该委托类型的事件
public event RefreshList RefreshListEvent;
>定义将执行操作的方法(即刷新网格)
private void RefreshListView()
{
// Code to refresh the grid
}
>现在需要在WindowAddActor中定义一个Delegate
Public Delegate UpdateActor;
>现在我们必须编写单击按钮,打开WindowAddActor表单让按钮成为btnAddActor,使其Click事件为btnAddActor_click,我们必须初始化我们的委托事件,WindowAddActor的实例,并将事件分配给WindowAddActor中的Delegate在显示该表格之前.这可以编码为:
private void btnAddActor_click(object sender, EventArgs e)
{
WindowAddActor actorInstance = new WindowAddActor();
RefreshListEvent += new RefreshList(RefreshListView); // event initialization
actorInstance.UpdateActor = RefreshListEvent; // assigning event to the Delegate
actorInstance.Show();
}
>现在我们必须从SaveButton的click事件中调用该委托
private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
{
// Perform save operation
UpdateActor.DynamicInvoke(); this will call the `RefreshListView` method of mainWindow
this.Close();
}