嵌套Grid,光棍月大放送,不藏着掖着。实在写的不好,没脸藏啊~只考虑显示排序修改什么的都不管!

话说三石官网加实例了,http://fineui.com/demo/#/demo/grid/grid_rowexpander_grid.aspx 是用extjs写的,我写的啰嗦点

扩展行是咋出来的,我着实没看懂,但是要实现效果也有方法,先想一下,
1.嵌套的Grid数据应该是动态的,我只知道在后头绑,事件是前台触发的,那就是把ID传后台就行了。
2.一个下拉生成一个Grid,后台生成到前台我不会,前台用ExtJs生成太复杂,要写好多的ExtJs原生。
3.结合以上两点大概代码是这样的,前台触发ID传到后台,后台绑定数据,在前台复制现成的控件,显示。
 
开始
1.先准备个grid,就不写了,准备行扩展列
  1. <f:TemplateField ColumnID="griditem" Hidden="true" RenderAsRowExpander="true">
  2. <ItemTemplate>
  3. <div runat="server" id="divItem" class="expander">
  4. </div>
  5. </ItemTemplate>
  6. </f:TemplateField>

  

在每行展开的时候把扩展的grid复制到id=divitem里就可以了。
2.触发事件
API里真没找见,在网上找到的,拿过来可以用,
  1. F('<% =Grid1.ClientID%>').view.on('expandBody', function (rowNode, record, expandRow, eOpts) {
  2. //传到后台,参数为行ID,行绑定的数据ID
  3. F.customEvent('GridItem_' + rowNode.id + '_' + record.get('ItemId'));
  4. });

  

3.准备个扩展的Grid
正常些就可以,我放在了Panel里。JQ是为了控制Grid2的样式。
  1. <f:Panel runat="server" ID="PanelGrid1" Height="0px" Hidden="false">
  2. <Items>
  3. <f:Grid ID="Grid2" Width="200px" runat="server" ShowBorder="false" ShowGridHeader="true"
  4. ShowHeader="false" AllowColumnLocking="True">
  5. <Columns>
  6. <f:TemplateField Width="60px" HeaderText="序号">
  7. <ItemTemplate>
  8. <asp:Label runat="server" Text='<%# Container.DataItemIndex + 1 %>'></asp:Label>
  9. </ItemTemplate>
  10. </f:TemplateField>
  11. <f:BoundField runat="server" HeaderText="身高" DataField="ShenGao" />
  12. <f:BoundField runat="server" HeaderText="体重" DataField="TiZhong" />
  13. <f:BoundField runat="server" HeaderText="血压低" DataField="XueYaDi" />
  14. <f:BoundField runat="server" HeaderText="血压高" DataField="XueYaGao" />
  15. </Columns>
  16. </f:Grid>
  17. </Items>
  18. </f:Panel>

  

  1. F.ready(function () {
  2. F('<% =Grid2.ClientID%>').autoWidth = true;
  3. F('<% =Grid2.ClientID%>').autoHeight = true;
  4. F('<% =Grid2.ClientID %>').setWidth(F('<% =Grid1.ClientID %>').getWidth() - 100);
  5. });

  

4.准备复制方法
刚才说是前台复制,两种,一个是extjs可以复制grid2元素然后显示到指定位置,没试出来,实在没时间会。
第二个方法就是整个过程的核心也是最偷懒的地方,直接复制HTML,复制HTML最大的问题是ID,两个ID一样了EXTJS会乱的,好在他只认一个,我把PanelGrid1放在了Grid1 的上面,后台找到的Grid2就是Panel里的了;复制HTML还会复制Grid2 的所有属性,如果Grid2.Hidden=Ture那也复制过去了,不显示了,所以PanelGrid1的Height=0,就是隐藏的意思。
另一个重要的就是获取了,要把HTML复制用JQ找到来源和目标,直接上代码,大家不用找了
  1. function showgirdItme(rowid) {
  2. //选择行隐藏列的ID,rowid来自后台
  3. var itemid = $('#' + rowid).find('div .expander').attr('id');
  4. //复制的HTML
  5. $('#' + itemid).html($('#<% =PanelGrid1.ClientID %>-innerCt').html());
  6. }

  

手动触发showgirdItme正常,rowid哪来的,在事件里获到的。
还有一个关闭事件,仍掉复制的东西,省着占地,
不要写错地方,Sunny就写错了
下面这段放到F.ready里,放ready外面获取不到F('<% =Grid1.ClientID%>')的
  1. F('<% =Grid1.ClientID%>').view.on('collapsebody', function (rowNode, record, expandRow, eOpts) {
  2. var itemid = $('#' + rowNode.id).find('div .expander').attr('id');
  3. $('#' + itemid).html('');
  4. });

  

5.后台
触发了后台方法,把方法打出来
Sunny没看懂;
此事件触发   protected void PageManager1_CustomEvent(object sender, CustomEventArgs e) 所以首先要定义 PageManager1_CustomEvent 事件
比如:<f:PageManager ID="PageManager1" AutoSizePanelID="Panel2" OnCustomEvent="PageManager1_CustomEvent" runat="server" />
你们都没我对她好
  1. if (e.EventArgument.IndexOf("GridItem_") >= 0)
  2. {
  3. string rowid = e.EventArgument.Split('_')[1].ToString();
  4. string id = e.EventArgument.Split('_')[2].ToString();
  5. DataTable table = GetDataTable();
  6. DataRow[] drs = table.Select("Id = '" + id + "'");
  7. DataTable dt = new DataTable();
  8. dt = table.Clone();
  9. foreach (DataRow dr in drs)
  10. {
  11. //模拟数据
  12. dt.Rows.Add(dr.ItemArray);
  13. dt.Rows.Add(dr.ItemArray);
  14. if (Convert.ToInt32(id)>102)
  15. {
  16. dt.Rows.Add(dr.ItemArray);
  17. dt.Rows.Add(dr.ItemArray);
  18. }
  19. }
  20. //绑定
  21. Grid2.DataSource = dt;
  22. Grid2.DataBind();
  23. //注意延迟方法
  24. string sc = "window.setTimeout(function () {showgirdItme('" + rowid + "');},100);";
  25. FineUI.PageContext.RegisterStartupScript(sc);
  26. }

  

就是获得数据,绑定,但是看到有setTimeout方法,因为Extjs是延迟加载,他会先执行js然后在绑定,所以只能绑定完了在执行复制,这是个处理的小技巧。
没了,上个图
 
还要注意嵌套的Grid点不了,因为一点就是选择的Grid1的行,应该是样式就可以调,不弄了,我也用不上。源码,看吧,有心情就弄,没有自己沾吧
这玩应也有脸拿出来也算第一人了,偷懒了,等成熟了(我会了)再完善吧。
本来不想放源码着 CSDN资源10分

ASP.NET-FineUI开发实践-10的更多相关文章

  1. FineUI开源版(ASP.Net)开发实践-目录

    点我订阅 目前所有博客的截图,方便离线观看,点图片 FineUI初学手册 下载,实例项目搭建 FineUI初学手册-部分JS整理 部分JS整理 ASP.NET-FineUI开发实践-1 实际开发环境是 ...

  2. FineUI开发实践-目录

    点我订阅 目前所有博客的截图,方便离线观看,点图片 FineUI初学手册 下载,实例项目搭建 FineUI初学手册-部分JS整理 部分JS整理 ASP.NET-FineUI开发实践-1 实际开发环境是 ...

  3. FineUI开发实践

    ASP.NET-FineUI开发实践-7 摘要: 下拉显示grid列表.其实很简单,但是试了很多方法,水平有限,主要是都不好使,还是简单的好使了,分享下.先是看了看网上的,是直接写个了extjs控件类 ...

  4. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  6. ASP.NET-FineUI开发实践-9(四)

    现在是这么个问题,在开发中表格是动态出来的,就是标准板是全部字段列出,客户要根据情况列出自己想要的,在增加操作页面的同时要是能用前台自带的功能直接保存到后台就好了,现在的列显示和隐藏是不回发的. 1. ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

随机推荐

  1. SASS type-of 函数

    今儿写个type-of,算是备忘录吧. 1.number type-of(0) // number type-of(1px) // number 2.string type-of(a) // stri ...

  2. Uncaught SyntaxError: Unexpected end of input

    js报错  原因:输入的意外终止…… 页面代码写的不规范啊……其中的某条语句,没有正常结束…… 或者部分语句“‘’”双引号,单引号没有配对好,被转义了之类的……错误造成的 代码: <script ...

  3. Gnuradio 学习

    8月份就把usrp买过来了,不过由于一直比较忙, 也没怎么弄. 这几天准备学习学习,暂时也不知道能干些啥.不管怎么样先按教程走一遍,熟悉熟悉设备也是好的吧. 首先去Ettus 下载了一个官方指导,一步 ...

  4. Uva 120 - Stacks of Flapjacks(构造法)

    UVA - 120  Stacks of Flapjacks Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld &a ...

  5. readn、write、readline

    字节流套接字上的read和write函数所表现的行为不同于通常的文件IO 字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,然而这不是出错的状态 这个现象的原因在于内核中用于 ...

  6. laravel框架——保存用户登陆信息(session)

    public function inlog(Request $request) { //获取表单提交的数据 $input = $request->all(); //根本获取的数据去数据库中查询 ...

  7. Hibernate的查询语言之HQL(二)——Hibernate查询的from字句

    from 是最简单的HQL语句,也是最基本的HQL语句.from 关键字后紧跟持久化类的类名.例如: from Person 表明从Person持久化类中取出全部的实例. 大部分时候,推荐位该Pers ...

  8. 转:精心挑选的12款优秀 jQuery Ajax 分页插件和教程

    在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的  ...

  9. BZOJ 2434 阿狸的打字机

    http://www.lydsy.com/JudgeOnline/problem.php?id=2434 思路:建立fail树,并找出dfs序,那剩下要做的就是每次找到一个串的位置,然后询问它的区间里 ...

  10. web2.0的几个开源项目

    web2.0的几个开源项目   Diggclone-开源digg类程序官方:http://www.talkingpixels.org/diggclone/index.php演示:同digg.com类似 ...