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

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

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

  

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

  

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

  

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

  

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

  

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

  

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

  

就是获得数据,绑定,但是看到有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. Oracle高级查询,事物,过程及函数

    一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...

  2. Jquery创建JSON对象

    <html> <body> <h2>通过 JSON 字符串来创建对象</h3> <p> First Name: <span id=&q ...

  3. JQuery学习笔记【CSS选择符】--02

    Jquery的程序入口: <html> <head> <title></title> <script type="text/javasc ...

  4. python学习第十七天 --定制类

    何为定制类? Python的class允许定义许多特殊方法,可以让我们非常方便地生成特定的类.在类中应用或者重写python的特殊方法,得到的类,就是定制类. 大家都知道print的用法.见下面例子 ...

  5. 基于memcached中命令分析函数tokenize_command改造的split函数

    今天使用C重构php代码,需要手写一个split函数,于是就模仿memcached中获取用户命令的函数 static size_t tokenize_command(char *command, to ...

  6. ajax切换明星头像!

    html部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  7. 原生网络请求:同步请求、异步请求、GET请求、POST请求

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  8. Android Service 启动和停止服务

    activity_main.xml 定义两个Button控件,start_service和stop_service. <LinearLayout xmlns:android="http ...

  9. ExtJS5_MVVM特性的简单说明

    下面我们来看一下自动生成的代码中的MVVM架构的关系.Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类. 在上面的图片中,左边是Main. ...

  10. WINDOWS自启动程序的10大隐身之所

    Windows启动时通常会有一大堆程序自动启动.不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个 ...