//首先构造嵌套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. ScrollView中嵌套ExpandableListView

    为了让SrollView中嵌套ExpandableListView,我们就得改ListView的高度,所以写一个类继承于ExpandableListview: import android.conte ...

  2. BZOJ:5092 [Lydsy1711月赛]分割序列(贪心&高维前缀和)

    Description 对于一个长度为n的非负整数序列b_1,b_2,...,b_n,定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b _2 xor...xor ...

  3. GLSL 内建函数

    内建函数基本上可以分为一下三类: (1)它们使用一些简便的方式提供必要的硬件功能,如材质贴图.这些函数单独通过着色器是无法模拟出来的. (2)它们展示了一些可以常简单的写入的繁琐操作(clamp, m ...

  4. POJ2185 Milking Grid 【lcm】【KMP】

    Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...

  5. BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】

    BZOJ3196 Tyvj1730 二逼平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名 ...

  6. IOS Number 处理(int-->NSNumber,NSNumber-->nsinteger,string -->double,CGFloat --> dobule)

    1 小结: 1)int-->NSNumber:numberWithInt 2)NSNumber-->nsinteger:integerValue 3)string -->double ...

  7. iOS应用截屏

    iPhone自从推出后就自带了截屏功能,简单而易用,所以应用就没什么截屏的需求了,不过有些时候我们还是会遇到这个需求.比如,我们开发了一个播放器,用openGL进行video render,此时直接截 ...

  8. simulink生成hdl的几个理解

    1,simulink生成hdl的话需要用支持的模块,否则不能生成,支持的模块组成一个库,这个库需要自己生成,用hdllib命令生成,官方原话: The hdllib function creates ...

  9. 洛谷 P1098 字符串的展开

    题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...

  10. new/delete和malloc/free区别

    相同点: 都可用于申请动态内存和释放内存 不同点: 操作对象有所不同. 本质区别: malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符,对象在创建的同时要自动 ...