嵌套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. 03_RHEL7.1去掉注册提示

    # rpm –qa|grep subscription-manager 出现类似下面的代码: subscription-manager-firstboot-1.13.22-1.el7.x86_64 s ...

  2. EF学习系列

    http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html http://kb.cnblogs.com/zt/ef/#

  3. Extjs嵌入html

    方式一:使用组件的html属性嵌入html代码,如果html代码中存在参数可以使用字符串拼接的方式拼接html代码. html页面: <!doctype html> <html> ...

  4. HDU-1799(组合递推公式)

    HDOJ-1799 - Fighting_Dream M - 暴力求解.打表 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Forma ...

  5. Sqlserver 正则替换函数的一种实现

    --函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO CREATE FUNCTION ...

  6. Java对象引用

    1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...

  7. 转:更改 centos yum 源

    centos下可以通过yum很方便快捷的安装所需的软件和库,如果yum的源不好,安装速度会非常慢,centos默认官方源似乎都是国外的,所以速度无法保证,我一直使用163的源,感觉速度不错.下面就说说 ...

  8. fpdf使用標楷體

    <? require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); $pdf->AddPage(); $ ...

  9. 更改新建Asp.net WebForm的模板 的方法

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Web\2052\WebFor ...

  10. 移動電源ic的概述

    移動電源ic壹種集供電和充電功能於壹體的便攜式充電器,可以給手機等數碼設備隨時隨地充電或待機供電.壹般由鋰電芯或者幹電池作為儲電單元.區別於產品內部配置的電池,也叫外掛電池.壹般配備多種電源轉接頭, ...