前言:
在Windows开发和Web开发中,经常需要使用父子网格控件,即用父子两个网格显示相关联的信息,点击父网格即在子网格中显示与之有关的信息。使用父子网格控件,既可以合理显示信息,又可以简化操作。下面笔者以一个显示物料和物料下每个包装的案例介绍父子网格控件的使用。
一、 本案例需求
本案例是一个仓库物料盘点小模块。仓库中的物料按箱包装,每箱都有个唯一性的批号(相当于公民身份证)。开始时每箱的数量相同,但因车间使用,有些箱的数量会减少。
现在程序上需要实现:以网格显示仓库中的物料,每个物料的最后一列用以显示箱号链接,链接能够展开和隐藏物料下的批号。如果点击一个没展开批号的链接,即将链接所在行的物料箱号和数量显示在该行的下面。如果点击一个已经展开的链接,则将链接所在行的物料箱号隐藏。
二、 程序设计要点
实现这个功能比较简单,主要在于父子网格嵌套,子网格根据父网格的行进行数据查询,子网格的显示和隐藏。
本程序开发语言用C#,网格控件用GridView,在Asp.Net环境下实现,为了显示和隐藏子网格,还需要用到Javascript。下面分别对本程序的实现要点进行说明
1、 父子网格控件的嵌套
要把子网格嵌套到父网格中,其实就相当于在父网格中指定一列,通过点击该列就能在子控件中显示或隐藏与该行有关的详细信息。
在父网格中显示的信息有三列,分别为品号、GRNLot(入库批次)、库存数量。另还需增加一列作为与子网格的链接。
2、 子网格的数据查询
当点击父网格中一行的链接时,即要展开子网格(假设子网格为隐藏),并在子网格中显示与点击行物料有关的箱号和数量。这里有连个因素:一是什么情况下触发该展开事件,二是父子网格怎么传递参数------以保证子网格中显示的箱号就是父网格中被点击行的物料下所有。
对于第一个问题,GridView控件中有专门的事件 OnRowDataBound 来达到此目的,此事件在父网格中执行。
第二个问题,需要在父网格中指定关键字,用DataKeyNames参数,可以指定多个,中间以 , 隔开。