ASP.NET-FineUI开发实践-10

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

扩展行是咋出来的,我着实没看懂,但是要实现效果也有方法,先想一下,

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哪来的,在事件里获到的。

还有一个关闭事件,仍掉复制的东西,省着占地,

            F(‘<% =Grid1.ClientID%>‘).view.on(‘collapsebody‘, function (rowNode, record, expandRow, eOpts) {
                var itemid = $(‘#‘ + rowNode.id).find(‘div .expander‘).attr(‘id‘);
                $(‘#‘ + itemid).html(‘‘);
            });

  

5.后台

触发了后台方法,把方法打出来

            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的行,应该是样式就可以调,不弄了,我也用不上。源码,看吧,有心情就弄,没有自己沾吧

这玩应也有脸拿出来也算第一人了,偷懒了,等成熟了(我会了)再完善吧。

时间: 2024-09-05 11:43:44

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

FineUI开发实践-目录

FineUI初学手册 下载,实例项目搭建 ASP.NET-FineUI开发实践-1 实际开发环境是FineUI 4.0.4,编辑页面回发,__doPostBack应用 ASP.NET-FineUI开发实践-2 1.Window控件显示2.显示隐藏控件4.直接通过行号修改指定列内容5.获取iframe ASP.NET-FineUI开发实践-3 1.参照模拟数据库分页通过缓存重写内存分页,优化页面响应速度2.得到指定行指定列的值后台3.按钮至少选择一项的通用方法,OnClientClick+=累加.

ASP.NET5+EntityFramework7开发实践(三)

1.说明 在<ASP.NET5+EntityFramework7开发实践(一)>介绍过仓储模式,只是没有在控制器中如何使用? 本章重新补充一下.注意,也会使用ASP.NET5中的依赖注入. 2.仓储模式 先看接口: 1 public interface IRoleRepository:IDisposable 2 { 3 //IEnumerable和IQueryable 4 //二者在EF都会延迟加载,不同的是: 5 //IEnumerable是数据加载到内存,刷选在内存中的数据上执行 6 //

ASP.NET5+EntityFramework7开发实践(一)

 1.创建项目 创建“空白解决方案”,名为GiveCase. 在解决方案里,添加ASP.NET5 Empty模板项目,名为GiveCase.Web.  2.实体类 实体基类: 1 /// <summary> 2 /// 实体 抽象基类 3 /// </summary> 4 /// <typeparam name="TKey">主键类型</typeparam> 5 public abstract class EntityBase<TK

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

现在是这么个问题,在开发中表格是动态出来的,就是标准板是全部字段列出,客户要根据情况列出自己想要的,在增加操作页面的同时要是能用前台自带的功能直接保存到后台就好了,现在的列显示和隐藏是不回发的. 1.FineUI引用的extjs是ext-part1.js,这就不说了,以前截过图,这个文件是压缩的,参数也是简化的不好看,其实这个就是ext-all.js,ext-all哪来的呢,就是extjs官方实例里下的,下来之后也是压缩的,旁边还有个不压缩的,ext-all-debug.js ,完全可以看,那我

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

转自:http://www.cnblogs.com/mzwhj/p/3592895.html 上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东西没有理由不支持. 附件的上传同样基于KindEditor实现,可以上传图片,flash,影音,文件等. 目录 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一)

20189208《移动平台开发实践》第10周学习总结

<移动平台开发实践>第10周学习总结 教材学习内容总结 第39章偏好 调用SharedPreference接口管理键/值对类型的应用程序设计,通过getDefaultSharePreferences静态方法传入 Context来获取SharedPreferences的默认实例.使用Android Preference API创建编辑设置的界面 第40章 第41章 第42章 教材学习中的问题和解决过程 问题1: 问题1解决方案: 问题2: 问题2解决方案: 代码调试中的问题和解决过程 问题1:

【新书推荐】《微软开源跨平台移动开发实践》带你走近微软开源开源跨平台技术

上周收到本书作者李争送的一本12月份的新书<微软开源跨平台移动开发实践——利用ASP.NET Core 1.0 .Apache Cordova.Xamarin和Azure快速构建移动应用解决方案>.这本书的名字超长.这本书也是超薄,只有220页,一个周末时间就读完了,但是这本书的内容确是超丰富,浓缩了微软这三年向开源和跨平台领域的转变,微软在开源和跨平台领域构建出来的一套技术体系.从服务端的NET Core.ASP.NET 和 Web APi ,到Web端的 Typescript脚本语言,再到

ASP.NET程序开发范例宝典

在整理资料时发现一些非常有用的资料源码尤其是初学者,大部分是平时用到的知识点,可以参考其实现方法,分享给大家学习,但请不要用于商业用途. 如果对你有用请多多推荐给其他人分享. 点击对应章节标题下载本章节下所有源代码. 目录: 第2章 HTML开发与实践 15 2.1 框架的使用 16 实例009 使用FrameSet框架布局聊天室 16 实例010 使用IFrame框架布局企业管理系统 17 2.2 滚屏的实现 18 实例011 滚动显示博客公告 18 实例012 滚屏效果并实现超级链接 20

ASP.NET跨平台最佳实践

前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java更优秀(并非C#天生丽质,而是它站在了巨人的肩膀上). 本文并非为.NET正名而来,而仅仅是分享作者近几年在ASP.NET跨平台方面的研究与实践经验,算是对八年的.NET之路作一个阶段性的总结. .NET技术自诞生以来,便一直因其跨平台能力差而广受诟病.这里面有微软有意为之,也有别有用心之人在混淆视