一对多关联场景下如何打开新窗口并传递多统计值?
一对多场景下向新窗口传递多统计值的实现方案
一、确定需要传递的内容
结合你的数据库表结构(Tbl_cardhall为对象信息表,tbl_stat为统计数据表),有两种可选的传递内容:
- 选中对象的唯一标识:比如
Tbl_cardhall的主键(如CardHallId),新窗口通过这个ID从数据库查询对应的所有tbl_stat统计数据。 - 预查询好的统计数据集合:直接传递当前选中
Tbl_cardhall对应的所有tbl_stat实体集合,新窗口可直接使用,无需额外数据库操作。
二、具体传递实现方式
方式1:通过构造函数传递统计数据集合(推荐,直接高效)
先定义统计窗口类,接收统计集合作为构造参数:
// 统计窗口类 public partial class StatWindow : Window { private IEnumerable<tbl_stat> _statData; // 构造函数接收统计集合 public StatWindow(IEnumerable<tbl_stat> statData) { InitializeComponent(); _statData = statData; // 将数据绑定到UI控件(示例为DataGrid) statDataGrid.ItemsSource = _statData; } }
在主窗口的点击事件中,先查询选中对象对应的所有统计数据,再传递给新窗口:
private void ClickShowStats(object sender, RoutedEventArgs e) { // 假设你有数据库上下文对象dbContext var statList = dbContext.tbl_stat .Where(s => s.CardHallId == SelectedCardhall.Id) .ToList(); // 创建统计窗口并传递数据 StatWindow statWindow = new StatWindow(statList); statWindow.Show(); }
方式2:通过构造函数传递对象ID,新窗口自行查询数据
如果希望统计窗口独立处理数据查询,可传递选中对象的主键:
// 统计窗口类 public partial class StatWindow : Window { public StatWindow(int cardHallId) { InitializeComponent(); // 窗口初始化时查询数据 using(var dbContext = new YourDbContext()) { var statData = dbContext.tbl_stat .Where(s => s.CardHallId == cardHallId) .ToList(); statDataGrid.ItemsSource = statData; } } }
主窗口点击事件调用:
private void ClickShowStats(object sender, RoutedEventArgs e) { // 传递选中对象的主键ID StatWindow statWindow = new StatWindow(SelectedCardhall.Id); statWindow.Show(); }
三、补充说明
如果你的SelectedCardhall已通过导航属性关联了tbl_stat集合(类似你之前用的CardPavNavigation),可以直接传递关联集合,无需额外查询:
StatWindow statWindow = new StatWindow(SelectedCardhall.tbl_statNavigation); statWindow.Show();
推荐使用第一种方式,将数据查询逻辑放在主窗口或专门的数据服务类中,统计窗口仅负责展示数据,符合单一职责原则。
内容的提问来源于stack exchange,提问作者Roody
相关产品推荐
相关产品推荐

