ASP.NET-FineUI开发实践-12

简介: 1.网上找到了行合并的示例,extjs写的,我把它挪过来改了下,FineUI也能用,就是只能放着看,选择和编辑行扩展列没有测试,放出来大家看着用吧。 F.ready(function () { //方法span 参数(grid实例,行号,列...

1.网上找到了行合并的示例,extjs写的,我把它挪过来改了下,FineUI也能用,就是只能放着看,选择和编辑行扩展列没有测试,放出来大家看着用吧。

    <script>
        F.ready(function () {
            //方法span 参数(grid实例,行号,列号,合并状态,合并数量)
            var span = function (grid, row, col, type, num) {
                //这是一个列隐藏机制,发现列隐藏了合并的效果会错位
                var hiddens = [], columns = grid.columns;
                var b = true;
                Ext.Array.each(columns, function (column, index) {
                    if (column.isHidden()) {
                        //如果要隐藏的列隐藏了
                        if (col == index + 1) {
                            //合并单元格不生效
                            b = false;
                        }
                    }
                });
                if (b) {
                    switch (type) {
                        //类型,行
                        case 'row':
                            //getNode 找到节点 row 就是找到行,query,用JQuery所搜所有行的td,可以看出grid其实用表格拼的
                            tds = Ext.get(grid.view.getNode(row)).query('td');
                            //通过列号找到列,编辑属性 rowspan=num 合并数量
                            Ext.get(tds[col]).set({ rowspan: num });
                            //加入垂直居中属性,当然可以自己写
                            Ext.get(Ext.get(tds[col])).setStyle({ 'vertical-align': 'middle' });
                            //循环被盖住的单元格,destroy 扔掉
                            for (i = row + 1; i < row + num; i++) {
                                Ext.get(Ext.get(grid.view.getNode(i)).query('td')[col]).destroy();
                            }
                            break;
                        case 'col':
                            //合并列的,跟行的一样,没试,自己写写
                            tds = Ext.get(grid.view.getNode(row)).query('td');
                            Ext.get(tds[col]).set({ colspan: num });
                            break;
                    }
                }
            };
            //执行合并方法,注意参数
            span(F('<% =Grid1.ClientID%>'), 2, 2, 'row', 3);
            //在列隐藏和显示时执行合并行,否则会错位
            F('<% =Grid1.ClientID%>').on('columnhide', function () {
                span(F('<% =Grid1.ClientID%>'), 2, 2, 'row', 3);
            });
            F('<% =Grid1.ClientID%>').on('columnshow', function () {
                var grid = F('<% =Grid1.ClientID%>');
                span(grid, 2, 2, 'row', 3);
            });
        });
    </script>

 这是个思路,具体情况很复杂,不能正式使用,要用的可以自己研究下

把这个沾到grid下看看就知道了没必要发例子了。

2.加了个列头上的过滤控件,当然可以加别的

查询可以用到,有兴趣的可以自己写写,还是说方法,其实以前就提到了好多遍,就是加了个属性,然后就没了。

我在源码的GridCloumn.cs里加了两个属性,filter和filterName,记录显示的东西和开启显示控件

        private bool _filter = false;
        /// <summary>
        /// 启用过滤功能
        /// </summary>
        [Category(CategoryName.OPTIONS)]
        [DefaultValue(true)]
        [Description("启用过滤功能")]
        public virtual bool filter
        {
            get
            {
                return _filter;
            }
            set
            {
                _filter = value;
            }
        }
        private string _filterName = "";
        /// <summary>
        /// 过滤功能的列
        /// </summary>
        [Category(CategoryName.OPTIONS)]
        [DefaultValue(true)]
        [Description("过滤功能的列")]
        public virtual string filterName
        {
            get
            {
                return _filterName;
            }
            set
            {
                _filterName = value;
            }
        }

 这个一看就明白了,然后我再列上用这俩个属性,

     <f:BoundField Width="100px" filter="true" filterName='PanelGrid1_textName' ColumnID="Name"
                DataField="Name" DataFormatString="{0}" HeaderText="姓名" />

 

注意filterName的参数,数控件的ClientID,这个我想用asp.net写法绑着,不成功,只能手写了。
PanelGrid1_textName是个text控件,我还写了个事件,编辑回发过滤刷新表格。
属性加好了就是实现,当然是OnFirstPreRender方法里,绘制事件,加上这句就可以了,可以看到就是加了个属性items 是哪个控件,当然是PanelGrid1_textName。最后一个true是原格式输出的意思,如果要加多个控件这个items就应该是个数组,这个还没有试。
到这就算成功了。
3.给grid加了个又侧栏,现在有底部的bar,extjs里叫bbar,其实还有tbar和rbar lbar,加了个rbar,可以参照自己加,感觉没啥大用。
还是改源码,这回改的是Grid.cs文件,先找到PageItems,PageItems就是bbar那我写一个PageRItems,
就是照贴,改个名。
下一步又找到了OnFirstPreRender方法,往里加就可以了,
 
            if (PageRItems.Count > 0)
            {
                OptionBuilder RBuilder = new OptionBuilder();
                //RBuilder.AddProperty("displayInfo", true);
                //RBuilder.AddProperty("store", Render_GridStoreID, true);
                JsArrayBuilder ab = new JsArrayBuilder();
                foreach (ControlBase item in PageRItems)
                {
                    if (item.Visible)
                    {
                        ab.AddProperty(String.Format("{0}", item.XID), true);
                    }
                }
                //cls: 'x-toolbar-paging',
                RBuilder.AddProperty("cls", "'x-toolbar-paging x-docked-bottom x-toolbar-docked-bottom x-toolbar-docked-bottom'", true);
                RBuilder.AddProperty("items", ab.ToString(), true);
                //rbarScript = String.Format("var {0}=Ext.create('Ext.ux.SimplePagingToolbar',{1});", Render_RBarID, RBuilder);
                OB.AddProperty("rbar", RBuilder, true);
            }

 

这里就用到了数组,可以研究下怎么拼的,最后加到rbar里,items是PageRItems里的的item。
到了前台的话没有问题就可以看到PageRItems了和PageItems平级
 
可以写写事件什么的,他自己就竖着排了
 
 
目录
相关文章
|
15天前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
|
17天前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
|
22天前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
40 1
|
1月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
1月前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
1月前
|
消息中间件 开发框架 前端开发
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
|
1月前
|
开发框架 JavaScript 前端开发
|
2月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
79 0
|
2月前
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
39 0
|
2月前
|
开发者 Apache 程序员
揭秘Apache Wicket:页面生命周期背后的神秘力量!
【8月更文挑战第31天】李工是一位热爱Web开发的程序员,近日在技术博客上分享了他对Apache Wicket框架的学习心得,特别是页面生命周期的理解。他认为掌握Wicket页面生命周期对于开发富交互式Web应用至关重要。他通过一个简单的计数器应用示例,详细解释了Wicket的组件化设计理念以及页面和组件在生命周期中的变化。
32 0

相关实验场景

更多