博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gridview展开嵌套显示
阅读量:5886 次
发布时间:2019-06-19

本文共 6364 字,大约阅读时间需要 21 分钟。

最近实在是太忙了,好几个月没有更新博客了,近来项目需要用到GRIDVIEW嵌套的,在这里跟大家分享一下,大家如有更好的解决方案,请不吝贴出。在ASP.NET中,GridView嵌套可以显示当前选定的父记录同时显示其子记录。例如,你可以创建按条件查找出相应项目的管理项目列表,同时可展开项目查看目前该项目进展到哪一阶段了。(如下图)

而这一使用的基本技术就是为父表创建一个GridView,它的每行又嵌入一个GridView,这些子GridView使用TemplateField来插入到父GridView中。唯一需要注意的是,不能在绑定父GridView的同时绑定子GridView,因为此时父行还没有被创建。而子GridView需要等待父GridView的DataBound时间发生。

      在这个示例中父GridView定义了自动产生列( AutoGenerateColumns="True"),我这里实际上使用了两个子GridView.

这些GRIDVIEW都没有直接指定数据源。而是采用编程的形式来实现。下面贴出父GRIDVIEW的DataBound事件。

private void grdProject_ItemDataBound(object sender, DataGridItemEventArgs e)        {            if (e.Item.DataItem is DataRowView)            {                string bindSql = @"EXEC SSM_SP_GETDTL @PROJECTNUM='" + ((Label)e.Item.FindControl("PROJECTNUM")).Text.Trim() + "', @REV='" + ((Label)e.Item.FindControl("REV")).Text.Trim() + "'";                base.doDataBind((DataGrid)e.Item.FindControl("grdProjectDetail1"), bindSql);                ((DataGrid)e.Item.FindControl("grdProjectDetail1")).Style.Add("display", "none");                bindSql = @"EXEC SSM_SP_GETOPHIST @PROJECTNUM='" + ((Label)e.Item.FindControl("PROJECTNUM")).Text.Trim() + "', @REV='" + ((Label)e.Item.FindControl("REV")).Text.Trim() + "'";                base.doDataBind((DataGrid)e.Item.FindControl("grdOPHistory"), bindSql);                ((DataGrid)e.Item.FindControl("grdOPHistory")).Style.Add("display", "none");                if (e.Item.FindControl("SHOW") != null)                {                    ((Image)e.Item.FindControl("SHOW")).Attributes.Add("onclick", "HierarGrid_toggleRow(this,'grdProjectDetail1')");                }                if (e.Item.FindControl("XXX") != null)                {                    ((Image)e.Item.FindControl("XXX")).Attributes.Add("onclick", "HierarGrid_toggleRow(this,'grdOPHistory')");                }                if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))                {                    string str2 = ((Label)e.Item.FindControl("PROJECTNUM")).Text.Trim();                    string str3 = ((Label)e.Item.FindControl("REV")).Text.Trim();                    ImageButton image = (ImageButton)e.Item.FindControl("btnEdit");                    image.Attributes.Add("onclick", "window.open('SSMProjectDetail.aspx?PROJECTNUM=" + str2 + "&REV=" + str3 + "&Mode=Edit','_blank','top=10,left=10,width=1100,height=900,scrollbars=yes,resizable=yes')");                                   }            }        }

 

 其实说白了也不难,但说不难也不容易。关键是前台面的HierarGrid_toggleRow怎么写。现将代码帖出,有不明白的地方请留言,如对您有帮助,请给个赞。

function HierarGrid_toggleRow(sender, grd) {            if (sender == null)                return;            var state = 1;            //if the hidden row has not already been generated, clone the panel into a new row            var existingRow = window.document.getElementById(sender.id + "showRow");            if (existingRow == null) {                //getting a reference to the table                var table = GetParentElementByTagName(sender, "TABLE");                var index = GetParentElementByTagName(sender, "TR").sectionRowIndex + 1;                //concatenate name of hidden panel => replace "Icon" from sender.id with "Panel"\n                if (grd == "grdProjectDetail1") {                    rowDivName = HierarGrid_ReplaceStr(sender.id, "SHOW", grd);                }                else {                    rowDivName = HierarGrid_ReplaceStr(sender.id, "XXX", grd);                }                var rowDiv = window.document.getElementById(rowDivName);                //adding new row to table                var newRow = table.insertRow(index);                newRow.id = sender.id + "showRow";                //adding new cell to row                var newTD = document.createElement("TD");                if (table.rows[0].cells[0].colSpan > 1)                    newTD.colSpan = table.rows[0].cells[0].colSpan;                else                    newTD.colSpan = table.rows[0].cells.length;                var myTD = newRow.appendChild(newTD);                //clone Panel into new cell                var copy = rowDiv;                copy.style.display = "";                myTD.innerHTML = copy.outerHTML;                rowDiv.parentNode.removeChild(rowDiv);                sender.src = HierarGrid_ReplaceStr(sender.src, "plus", "minus");                state = 1;            }            else {                if (existingRow.style.display == "none") {                    existingRow.style.display = "";                    sender.src = HierarGrid_ReplaceStr(sender.src, "plus", "minus");                    state = 1;                }                else {                    existingRow.style.display = "none";                    sender.src = HierarGrid_ReplaceStr(sender.src, "minus", "plus");                    state = 0;                }            }            // ChangeRowState(sender, state);        }        function HierarGrid_ReplaceStr(orgString, findString, replString) {            pos = orgString.lastIndexOf(findString);            return orgString.substr(0, pos) + replString + orgString.substr(pos + findString.length);        }        function GetParentElementByTagName(element, tagName) {            var element = element;            while (element.tagName != tagName)                element = element.parentNode;            return element;        }
View Code

 

转载于:https://www.cnblogs.com/Geton/p/4422294.html

你可能感兴趣的文章
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
LeetCode – LRU Cache (Java)
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
详解Linux中Load average负载
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>