ASP.NET-FineUI开发实践-16(一)

还是基础的东西,grid全选没有事件,给加个事件,除了需要会复制粘贴外还要点推荐那!

第一步:原理

事件被触发,方法被实现。

对于全选事件,被触发有两种方式可写,一个是通过原生extjs方式触发,extjs就没有全选的事件,正常思路就是选择的行等于全部的行就触发了,这个方法听起来就恶心,所以还是放弃了;简单点写就是第二种方法直接通过点击触发,点了全选就触发全选事件了。

所以这里还是写出来,无非就是获取元素F12

我们操作的就是这个div主意选中前和选中后的样式区别。

这样事件就写好了

1 $(‘#Grid1‘).find(‘.x-column-header.x-column-header-checkbox‘).on(‘click‘, function () {});

方法,就是回发,这里我们要触发的是cs的事件写法,不是回发的PageManager,而是回发的自定义事件,核心在__doPostBack的参数,什么样的参数可以触发cs的事件而不是没有意义,这里我参照了已有的事件rowselect事件,这时就用到了高级程序员才能用到的方法——复制!

第二步:实现

FineUI触发的事件就是基于的js回发,rowselect 是怎么触发的呢,右键查看源码得知

listeners 监听 select 选择 __doPostBack 两个参数,一个是Grid1 就是ID= Grid1 的控件 触发的,第二个有意思,主意是写死的RowSelect$ 再加上参数 index 就是第几行,原来是通过RowSelect$ 来通知后台触发的是行选择事件,那么我们定位Gird.cs,找到RowSelect$ 第3218行有一段

1             if (EnableRowSelectEvent)
2             {
3                 string validateScript = "var args=‘RowSelect$‘+index;";
4                 validateScript += GetPostBackEventReference("#RowSelect#").Replace("‘#RowSelect#‘", "args");
5                 string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript);
6                 selectOB.Listeners.AddProperty("select", rowSelectScript, true);
7             }

不用解释也应该能看出来,上面触发select的js 代码就是这样输出的。再点查询,又找到一个

1             else if (eventArgument.StartsWith("RowSelect$"))
2             {
3                 string[] commandArgs = eventArgument.Split(‘$‘);
4                 if (commandArgs.Length == 2)
5                 {
6                     OnRowSelect(new GridRowSelectEventArgs(Convert.ToInt32(commandArgs[1])));
7                 }
8             }

OnRowSelect 说明找到了,是在这里截取的__doPostBack 传来的参数RowSelect$并且写成了事件就可以在cs里触发他的重写了。

需要分析么?不需要,直接复制粘贴

1             else if (eventArgument.StartsWith("RowAllSelect$"))
2             {
3                 string[] commandArgs = eventArgument.Split(‘$‘);
4                 if (commandArgs.Length == 2)
5                 {
6                     OnRowAllSelect(new GridRowAllSelectEventArgs(bool.Parse(commandArgs[1].ToString())));
7                 }
8             }

改成了RowAllSelect$ ,前台给我传这个就说明触发cs 的OnRowAllSelect 行全选事件,为啥

OnRowAllSelect(new GridRowAllSelectEventArgs(bool.Parse(commandArgs[1].ToString())));这句会有波浪线?因为没有这个方法啊!接着复制OnRowSelect 改成 OnRowAllSelect 就可以了

找到OnRowSelect 复制

 1         #region OnRowAllSelect
 2         private static readonly object _rowAllSelectHandlerKey = new object();
 3         /// <summary>
 4         /// 头部全选事件(需要启用EnableRowAllSelect)
 5         /// </summary>
 6         [Category(CategoryName.ACTION)]
 7         [Description("头部全选事件(需要启用EnableRowAllSelect)")]
 8         public event EventHandler<GridRowAllSelectEventArgs> RowAllSelect
 9         {
10             add
11             {
12                 Events.AddHandler(_rowAllSelectHandlerKey, value);
13             }
14             remove
15             {
16                 Events.RemoveHandler(_rowAllSelectHandlerKey, value);
17             }
18         }
19         /// <summary>
20         /// 触发行选中事件
21         /// </summary>
22         /// <param name="e">事件参数</param>
23         protected virtual void OnRowAllSelect(GridRowAllSelectEventArgs e)
24         {
25             EventHandler<GridRowAllSelectEventArgs> handler = Events[_rowAllSelectHandlerKey] as EventHandler<GridRowAllSelectEventArgs>;
26             if (handler != null)
27             {
28                 handler(this, e);
29             }
30         }
31         #endregion

还有哪个有波浪?GridRowAllSelectEventArgs 没有接着建,新建cs文件,把GridRowSelectEventArgs复制过来,不要忘了写上署名

 1 #region Comment
 2 /*
 3  * Project:    FineUI
 4  *
 5  * FileName:    GridRowAllSelectEventArgs.cs
 6  * CreatedOn:   2015-10-14
 7  * CreatedBy:   没想好 [email protected]
 8  *
 9  *
10  * Description:
11  *      ->
12  *
13  * History:
14  *      ->
15  *
16  *
17  *
18  *
19  */
20 #endregion
21 using System;
22 using System.Data;
23 using System.Reflection;
24 using System.ComponentModel;
25 using System.Web.UI;
26 namespace FineUI
27 {
28     /// <summary>
29     /// 表格行选中事件参数
30     /// </summary>
31     public class GridRowAllSelectEventArgs : EventArgs
32     {
33         private bool _boolall;
34         /// <summary>
35         /// 选中状态
36         /// </summary>
37         public bool boolall
38         {
39             get { return _boolall; }
40             set { _boolall = value; }
41         }
42         /// <summary>
43         /// 构造函数
44         /// </summary>
45         /// <param name="rowIndex">选中状态</param>
46         public GridRowAllSelectEventArgs(bool boolall)
47         {
48             _boolall = boolall;
49         }
50     }
51 }

这样就应该不报错了,下回再写把。

时间: 2024-10-07 08:28:09

ASP.NET-FineUI开发实践-16(一)的相关文章

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

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

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.创建项目 创建“空白解决方案”,名为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 网站开发实践(一)

ASP.NET程序开发范例宝典

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

使用ADO实现BLOB数据的存取 -- ADO开发实践之二

使用ADO实现BLOB数据的存取 -- ADO开发实践之二 http://www.360doc.com/content/11/0113/16/4780948_86256633.shtml 一.前言 在上一篇文章<>中我们详细介绍了ADO基本的操作方法,在实际的开发过程中我们常常需要存储较大的二进制数据对象,比如:图像.音频文件.或其它二进制数据,这些数据我们称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别.本文将介绍利用ADO在数据库中存取B

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

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

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术