ASP.NET-FineUI开发实践-16(一)
2015-10-15 14:23
676 查看
还是基础的东西,grid全选没有事件,给加个事件,除了需要会复制粘贴外还要点[b]推荐[/b]那!
第一步:原理
事件被触发,方法被实现。
对于全选事件,被触发有两种方式可写,一个是通过原生extjs方式触发,extjs就没有全选的事件,正常思路就是选择的行等于全部的行就触发了,这个方法听起来就恶心,所以还是放弃了;简单点写就是第二种方法直接通过点击触发,点了全选就触发全选事件了。
所以这里还是写出来,无非就是获取元素F12
我们操作的就是这个div主意选中前和选中后的样式区别。
这样事件就写好了
方法,就是回发,这里我们要触发的是cs的事件写法,不是回发的PageManager,而是回发的自定义事件,核心在__doPostBack的参数,什么样的参数可以触发cs的事件而不是没有意义,这里我参照了已有的事件rowselect事件,这时就用到了高级程序员才能用到的方法——复制!
第二步:实现
FineUI触发的事件就是基于的js回发,rowselect 是怎么触发的呢,右键查看源码得知
listeners 监听 select 选择 __doPostBack 两个参数,一个是Grid1 就是ID= Grid1 的控件 触发的,第二个有意思,主意是写死的RowSelect$ 再加上参数 index 就是第几行,原来是通过RowSelect$ 来通知后台触发的是行选择事件,那么我们定位Gird.cs,找到RowSelect$ 第3218行有一段
不用解释也应该能看出来,上面触发select的js 代码就是这样输出的。再点查询,又找到一个
OnRowSelect 说明找到了,是在这里截取的__doPostBack 传来的参数RowSelect$并且写成了事件就可以在cs里触发他的重写了。
需要分析么?不需要,直接复制粘贴
改成了RowAllSelect$ ,前台给我传这个就说明触发cs 的OnRowAllSelect 行全选事件,为啥
OnRowAllSelect(new GridRowAllSelectEventArgs(bool.Parse(commandArgs[1].ToString())));这句会有波浪线?因为没有这个方法啊!接着复制OnRowSelect 改成 OnRowAllSelect 就可以了
找到OnRowSelect 复制
还有哪个有波浪?GridRowAllSelectEventArgs 没有接着建,新建cs文件,把GridRowSelectEventArgs复制过来,不要忘了写上署名
这样就应该不报错了,下回再写把。
第一步:原理
事件被触发,方法被实现。
对于全选事件,被触发有两种方式可写,一个是通过原生extjs方式触发,extjs就没有全选的事件,正常思路就是选择的行等于全部的行就触发了,这个方法听起来就恶心,所以还是放弃了;简单点写就是第二种方法直接通过点击触发,点了全选就触发全选事件了。
所以这里还是写出来,无非就是获取元素F12
我们操作的就是这个div主意选中前和选中后的样式区别。
这样事件就写好了
$('#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行有一段
if (EnableRowSelectEvent) { string validateScript = "var args='RowSelect$'+index;"; validateScript += GetPostBackEventReference("#RowSelect#").Replace("'#RowSelect#'", "args"); string rowSelectScript = JsHelper.GetFunction(validateScript, "model", "record", "index"); //String.Format("function(model,rowIndex){{{0}}}", validateScript); selectOB.Listeners.AddProperty("select", rowSelectScript, true); }
不用解释也应该能看出来,上面触发select的js 代码就是这样输出的。再点查询,又找到一个
else if (eventArgument.StartsWith("RowSelect$")) { string[] commandArgs = eventArgument.Split('$'); if (commandArgs.Length == 2) { OnRowSelect(new GridRowSelectEventArgs(Convert.ToInt32(commandArgs[1]))); } }
OnRowSelect 说明找到了,是在这里截取的__doPostBack 传来的参数RowSelect$并且写成了事件就可以在cs里触发他的重写了。
需要分析么?不需要,直接复制粘贴
else if (eventArgument.StartsWith("RowAllSelect$")) { string[] commandArgs = eventArgument.Split('$'); if (commandArgs.Length == 2) { OnRowAllSelect(new GridRowAllSelectEventArgs(bool.Parse(commandArgs[1].ToString()))); } }
改成了RowAllSelect$ ,前台给我传这个就说明触发cs 的OnRowAllSelect 行全选事件,为啥
OnRowAllSelect(new GridRowAllSelectEventArgs(bool.Parse(commandArgs[1].ToString())));这句会有波浪线?因为没有这个方法啊!接着复制OnRowSelect 改成 OnRowAllSelect 就可以了
找到OnRowSelect 复制
#region OnRowAllSelect private static readonly object _rowAllSelectHandlerKey = new object(); /// <summary> /// 头部全选事件(需要启用EnableRowAllSelect) /// </summary> [Category(CategoryName.ACTION)] [Description("头部全选事件(需要启用EnableRowAllSelect)")] public event EventHandler<GridRowAllSelectEventArgs> RowAllSelect { add { Events.AddHandler(_rowAllSelectHandlerKey, value); } remove { Events.RemoveHandler(_rowAllSelectHandlerKey, value); } } /// <summary> /// 触发行选中事件 /// </summary> /// <param name="e">事件参数</param> protected virtual void OnRowAllSelect(GridRowAllSelectEventArgs e) { EventHandler<GridRowAllSelectEventArgs> handler = Events[_rowAllSelectHandlerKey] as EventHandler<GridRowAllSelectEventArgs>; if (handler != null) { handler(this, e); } } #endregion
还有哪个有波浪?GridRowAllSelectEventArgs 没有接着建,新建cs文件,把GridRowSelectEventArgs复制过来,不要忘了写上署名
#region Comment /* * Project: FineUI * * FileName: GridRowAllSelectEventArgs.cs * CreatedOn: 2015-10-14 * CreatedBy: 没想好 935732994@qq.com * * * Description: * -> * * History: * -> * * * * */ #endregion using System; using System.Data; using System.Reflection; using System.ComponentModel; using System.Web.UI; namespace FineUI { /// <summary> /// 表格行选中事件参数 /// </summary> public class GridRowAllSelectEventArgs : EventArgs { private bool _boolall; /// <summary> /// 选中状态 /// </summary> public bool boolall { get { return _boolall; } set { _boolall = value; } } /// <summary> /// 构造函数 /// </summary> /// <param name="rowIndex">选中状态</param> public GridRowAllSelectEventArgs(bool boolall) { _boolall = boolall; } } }
这样就应该不报错了,下回再写把。
相关文章推荐
- Asp.net用户控件和委托事件
- MemScale: Active Low-Power Modes for Main Memory(2011 ASPLOS)
- asp.net mvc areas
- web配置问题
- ASP.NET MVC Framework
- ASP.NET MVC 3实现访问统计系统
- 为ASP.NET MVC及WebApi添加路由优先级
- chat.asp聊天程序的编写方法
- ASP基础入门第九篇(Global.asa文件的使用)
- ASP.NET MVC 5 Web编程5 -- 页面传值的方式
- 通过.net reflector了解asp.net站点的请求与响应过程
- [ASP.NET] 下一代ASP.NET开发规范:OWIN
- Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册
- org.aspectj.lang.JoinPoint-中文简要API
- ASP.NET入门 - 错误和异常处理
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC 3实现访问统计系统
- asp.net中如何批量导出access某表内容到word文档
- Asp.NET Visible属性与HTML display:none
- 树莓派(raspberry)启用root账户