如何在DevExpress项目中仅实现主从结构的明细区域?
实现DevExpress GridControl飞行员列表点击展开航班明细的方案
没问题!我来帮你搞定这个需求——只需要实现点击飞行员列表的加号区域,展开对应航班明细的功能对吧?下面是一步步的实操方案:
1. 先准备好关联数据源
首先你得有对应的实体类,把飞行员和航班的关联关系明确下来,示例代码如下:
public class Pilot { public int PilotId { get; set; } public string PilotName { get; set; } // 其他你需要的飞行员字段 public List<Flight> AssignedFlights { get; set; } // 存当前飞行员对应的所有航班 } public class Flight { public int FlightId { get; set; } public string FlightNumber { get; set; } public DateTime DepartureTime { get; set; } // 其他你需要的航班字段 public int PilotId { get; set; } // 关联对应的飞行员ID }
之后在窗体加载时,把包含航班数据的飞行员集合绑定到GridControl:
private void PilotForm_Load(object sender, EventArgs e) { // 这里替换成你实际获取数据的逻辑,确保每个Pilot的AssignedFlights都有对应数据 List<Pilot> pilotData = GetPilotDataWithFlights(); gridControl_Pilots.DataSource = pilotData; }
2. 配置主GridView(飞行员列表)
- 打开GridControl的设计器,选中主GridView(显示飞行员的那个视图)
- 找到
OptionsView属性组,把ShowDetailButtons设置为true——这就是每行左侧的加号区域 - 给主GridView添加你需要显示的飞行员列(比如姓名、ID等)
3. 创建并配置明细GridView(航班列表)
- 在GridControl设计器里,点击主GridView的「Create Detail Pattern」选项,生成一个新的GridView作为明细视图
- 给这个明细视图添加航班需要显示的列(比如航班号、起飞时间等)
- 关键配置:把明细视图的
DataMember属性设置为AssignedFlights(也就是Pilot类里存储航班集合的属性名),这样主行展开时会自动加载对应飞行员的航班数据
4. 自定义明细区域的行为(可选)
如果需要调整展开逻辑或样式,可以做这些设置:
- 要是想控制某行能不能展开(比如飞行员没有航班就隐藏加号),可以处理主GridView的
MasterRowExpanding事件:
private void gridView_Pilots_MasterRowExpanding(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowCanExpandEventArgs e) { Pilot currentPilot = gridView_Pilots.GetRow(e.RowHandle) as Pilot; // 只有当飞行员有航班时才允许展开 e.Allow = currentPilot?.AssignedFlights != null && currentPilot.AssignedFlights.Count > 0; }
- 还可以调整明细GridView的
OptionsView属性,比如是否显示网格线、行号等,让界面更贴合你的需求
5. 测试效果
运行程序后,点击飞行员列表每行左侧的加号按钮,就能展开对应的航班明细区域,和你参考的效果一致啦!
内容的提问来源于stack exchange,提问作者Burak Turhan
相关产品推荐
相关产品推荐

