You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGridView实现父行内嵌子表数据的层级展示及筛选、新增功能需求咨询

WPF DataGridView实现父行内嵌子表数据的层级展示及筛选、新增功能需求咨询

一、数据库结构说明

我有一个名为EmployeesDB的SQL Server数据库,包含4张表,表间为父子关系:

  • Employees表:作为父表,存储员工基础信息
  • EmployeesContacts表:Employees的子表,存储员工的电话号码(多数员工有多个号码)
  • EmployeesLanguages表:Employees的子表,存储员工掌握的语言及听说读写能力
  • EmployeesDuties表:Employees的子表,存储员工的工作职责

数据库建表脚本

USE [EmployeesDB]
GO

/****** Object:  Table [dbo].[Employees] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Employees](
[EmployeeID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[Age] [int] NULL,
[Gender] [nvarchar](10) NULL,
[Email] [nvarchar](200) NULL,
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[EmployeeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

/****** Object:  Table [dbo].[EmployeesContacts]  ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EmployeesContacts](
[EmployeeID] [int] NOT NULL,
[Telephone] [nvarchar](12) NOT NULL,
CONSTRAINT [PK_EmployeesContacts] PRIMARY KEY CLUSTERED
(
[Telephone] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

/****** Object:  Table [dbo].[EmployeesDuties] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EmployeesDuties](
[EmployeeID] [int] NOT NULL,
[EmployeeDutyID] [int] IDENTITY(1,1) NOT NULL,
[Duty] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_EmployeesDuties] PRIMARY KEY CLUSTERED
(
[EmployeeDutyID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

/****** Object:  Table [dbo].[EmployeesLanguages] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EmployeesLanguages](
[EmployeeID] [int] NOT NULL,
[EmployeeLanguageID] [int] IDENTITY(1,1) NOT NULL,
[LanguageName] [nvarchar](50) NULL,
[TalkingAbility] [nvarchar](20) NULL,
[ReadingAbility] [nvarchar](20) NULL,
[WritingAbility] [nvarchar](20) NULL,
CONSTRAINT [PK_EmployeesLanguages] PRIMARY KEY CLUSTERED
(
[EmployeeLanguageID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[EmployeesContacts]  WITH CHECK ADD  CONSTRAINT [FK_EmployeesContacts_Employees] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[Employees] ([EmployeeID])
GO
ALTER TABLE [dbo].[EmployeesContacts] CHECK CONSTRAINT [FK_EmployeesContacts_Employees]
GO

ALTER TABLE [dbo].[EmployeesDuties]  WITH CHECK ADD  CONSTRAINT [FK_EmployeesDuties_Employees] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[Employees] ([EmployeeID])
GO
ALTER TABLE [dbo].[EmployeesDuties] CHECK CONSTRAINT [FK_EmployeesDuties_Employees]
GO

ALTER TABLE [dbo].[EmployeesLanguages]  WITH CHECK ADD  CONSTRAINT [FK_EmployeesLanguages_Employees] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[Employees] ([EmployeeID])
GO
ALTER TABLE [dbo].[EmployeesLanguages] CHECK CONSTRAINT [FK_EmployeesLanguages_Employees]
GO

二、UI需求背景

我现在用WPF做了一个带DataGridView的窗口,但遇到了棘手的问题:我希望把所有父子表数据整合到同一个DataGridView中展示,这样就能复用DataGridView自带的筛选、排序、搜索等功能。

期望的展示效果是层级式的(所有行默认展开),父行对应Employees表数据,下方内嵌对应的Contacts、Languages、Duties子表数据行。

三、具体功能需求

  • 新增行提示:在每个父行的子行末尾,以及所有父行的末尾,都要显示“Click To Add New Row”的提示(类似示例图效果)
  • 筛选联动:比如筛选工作职责为“Advertiser”的员工时,要完整展示符合条件的员工的父行及所有关联子行(类似示例图的筛选后效果)

四、尝试过的方案及困境

我已经在谷歌上搜索了各种类似案例,但毫无收获;也尝试过用SQL Server视图来整合数据,但没能达到预期效果。真心希望能得到大家的帮助!

备注:内容来源于stack exchange,提问作者Meshka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:58:11