我正在基于Access数据库制作WPF项目。 该数据库有两个表:
- tblMovies(MovieID:PK,Title,Director,Genre等)
- tblActors(ActorID:PK,MovieID:FK,名字,姓氏等)
我有列表框,我可以看到所有的电影,如果我点击一个,它会显示一个新窗口,其中包含有关该电影的所有详细信息:标题,导演,流派,还有演员。
在这个窗口中,我添加了一个按钮来创建一个新的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;
}
提前致谢!
答案 0 :(得分:2)
好的,谢谢你的解释性评论......!我有一个建议给你,如果这有助于你编写你的场景,请告诉我:
所以你有两种形式WindowShowDetails
让它成为主形式,WindowAddActor
成为孩子,他们将是主窗体中的一个按钮,打开子窗体,你正在做孩子中的一些任务,然后按“保存”按钮,这将保存这些详细信息并关闭该表单。并且您希望在与此事件关联的主窗体中刷新List。为此你可以使用代表和事件;为此,你必须在主要形式和孩子中完成许多任务,让我告诉你它如何帮助你:
在主窗体中定义委托:
public delegate void RefreshList();
定义该委托类型的事件
public event RefreshList RefreshListEvent;
定义一个将执行操作的方法(即刷新网格)
private void RefreshListView()
{
// Code to refresh the grid
}
现在需要在WindowAddActor
Public Delegate UpdateActor;
现在我们必须编写按钮点击代码,打开WindowAddActor
表单让按钮为btnAddActor
,以便其Click事件为btnAddActor_click
,我们必须初始化我们的代表-event,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的点击事件中调用该委托
private void buttonSaveNewActor_Click(object sender, RoutedEventArgs e)
{
// Perform save operation
UpdateActor.DynamicInvoke(); this will call the `RefreshListView` method of mainWindow
this.Close();
}