//首先构造嵌套List,也就是一个list在另一个list中充当成员
//如:referModels 在res中充当成员
var res = totalAffectedMedels.Select(c => new
            {
                TIME_SLICE_ID = c.curModel.TIME_SLICE_ID,
                referModels = c.referModels == null ? null : c.referModels.Select(n => new
                {
                    数据类型 = n.TABLE_INFO,
                    名称 = n.NAME,
                    识别 = n.DESIGNATOR,
                    数量 = n.mCount
                }).ToList(),
                任务操作 = c.operType == CmmDb.DbOperation.Add ? "添加" :"",
                数据类型 = c.curModel.TABLE_INFO,
                名称 = c.curModel.NAME,
                识别 = c.curModel.DESIGNATOR
            }).ToList();

//确保GridControl的optionsDetail下的EnableMasterViewMode=true,该属性默认就是true

//最简单的方法直接将此list绑定到gdc的DataSource就能自动出现主从界面,不用在界面上做任何设置,如
//要显示隐藏哪些列完全通过上面的自定义List实现
//子表的标签会自动为referModels
CmmFrm.BestFitGridViewListWidth(gdc_TaskCancel, res, 1);

//如果要仅有个别列要隐藏,添加绑定事件MasterRowExpanded,在点击行头的+时触发
private void gdv_TaskCancel_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
        {
            GridView gridViewMaster = sender as GridView;
            GridView gridViewDetail = gridViewMaster.GetDetailView(e.RowHandle, e.RelationIndex) as GridView;
            if (gridViewDetail.IsNotNull())
            {
                gridViewDetail.BeginUpdate();
                gridViewDetail.Columns["TIME_SLICE_ID"].Visible = false;
                gridViewDetail.Columns["TIME_SLICE_ID"].OptionsColumn.ShowInCustomizationForm = false;
                gridViewDetail.EndUpdate();
            }
        }

//一般的做法是在gdv中添加Level视图,点击右键修改视图名称为子List名称,referModels,可绑定子表。所有子表列都能自动显示。
//也可以在界面中添加字段

关于子表事件

子表事件无法直接从界面添加,即使设置了子表界面,只能在主表展开时添加自定义事件,可解决点击子表时获取父表展开行

private void gdv_refer_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
        {
            if (e.RowHandle >= 0)
            {
                GridView detailView = gdv_refer.GetDetailView(e.RowHandle, 0) as GridView;
                detailView.RowCellClick -= GridView_RowCellClick;
                detailView.RowCellClick += GridView_RowCellClick;
            }
        }

实现:

private void GridView_RowCellClick(object sender, RowCellClickEventArgs e)
        {

//获取子表当前点击行所在的父表行
            gdv_refer.FocusedRowHandle = gdv_refer.LocateByValue("DETAIL_ID", (sender as GridView).GetFocusedDataRow().GetParentRow("Files")["DETAIL_ID"].ToString());           
        }

用嵌套List实现DataGrid的主从表显示的更多相关文章

  1. 在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列?

    在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列?(效果图如下:): 在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列(效果图) 实现该 ...

  2. BPM使用ligerUI实现主从表显示

    先看一下效果图: 界面有待美化,嘿嘿,下面说一下实现过程,当然,我的代码可能不对,就比如后台给前端返回JSON对象,应该包括状态和消息和数据,我这里直接给返回了JSON对象,所以,如果有大神,您知道怎 ...

  3. DevExpress gridcontrol gridView主从表折叠/展开显示

    在使用报表的时候,有很多需要主从表一起显示,从表不需要另外弹窗显示明细,反而直接显示在主表下方.如图所示: 第一次做这个功能,主从表显示,从表列隐藏,从表单元格点击事件这三个功能点花费了很多时间,在网 ...

  4. cxGrid主从表删除从表记录的困惑

    cxgrid主从表显示方便直观. varADetailDC: TcxGridDataController;AView: TcxCustomGridTableView; with cxgrdbndtbl ...

  5. easyUI dataGrid主从表点击展开问题

    昨天在公司写代码遇到了一个问题,就是在用easyUI做主从表的时候在查询之后点击展开的时候不能再次展开了.先说一下主从表我也是第一次用 效果如下图: 然后点击前面的小加号出现以下效果: 然而遇到了一个 ...

  6. 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询

    mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+count 需求: ======================================= ...

  7. EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

    本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...

  8. 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能

    在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...

  9. Winform开发框架之单据窗体生成(主从表,流水单号)

    源码地址:https://github.com/GarsonZhang/GZFramework.ShareDemo 前言 1.在开始本节前请先重置代码为 chapter-03-start 懒人地址:h ...

随机推荐

  1. Unity3D查找丢失材质和脚本工具

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  2. python全局替换文件内容脚本第1版

    #!/usr/bin/python #coding=utf8 """ # Author: xiaoyafei # Created Time : 2018-05-08 09 ...

  3. Verilog乘法器

    乘法器,不能用乘号直接表示,略坑呀 坑归坑,做还是要做的 思路:首先乘法分为有符号乘与无符号乘,所以建立两个module分别运算有符号与无符号.然后在总module中用case语句判断输出应赋的值. ...

  4. js之敏感词过滤

    HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  5. sqlserver获取代理服务作业job的执行情况

    以下脚本为获取sqlserver的执行job with testtemp as( SELECT sch.job_id,--his.[server] as InstanceName CONVERT(nv ...

  6. Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...

  7. Java 并发:volatile 关键字解析

    摘要: 在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性.可见性和有序性.只要有一条原则没有被保证,就有可能会导致程序运行不正确.volatile关键字 被用来保 ...

  8. 《DSP using MATLAB》示例 Example 6.25

    代码: % x = [-0.9, 0.81]; [y, L, B] = QCoeff(x, 3) % Unquantized parameters r = 0.9; theta = pi/3; a1 ...

  9. 【angularJS】Directive指令

    AngularJS 通过被称为 指令 的新属性来扩展 HTML.指令是扩展的 HTML 属性,带有前缀 ng-. 内置指令 1.ng-app 指令初始化一个 AngularJS 应用程序. 定义了 A ...

  10. 网络赛牡丹江赛区E ZOJ3813(线段树)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5345 给定序列P,定义序列S为P反复重复得到的一个无穷长的序列: if P = ...