@北京-没想好 直接QQ通话

ASP.NET-FineUI开发实践-17

我又不用FineUI开发,所以FineUI项目经验等于0,最近在忙别的,所以也没工夫研究。积累了论坛和群里的问题,写下来留个备份

1.在grid可编辑单元格中,如果需要在点击该单元格时,单元格中所有文字内容全部选中的功能如何实现
解决办法,利用了grid编辑前事件,现在FineUI开源版写事件很方便,所以没啥新鲜的,添加事件
Event 就是事件名称,比如 click dbclick等,Handler就是调用的方法函数,这里就写函数名称即可,参数是自动传的
1        </Columns>
2             <Listeners>
3                 <f:Listener Event="beforeedit" Handler="Gbeforeedit" />
4             </Listeners>
5         </f:Grid>

 

实现:
看注释应该能看懂,第一个是...第二个...第三个,反正就是参数...
 1             function Gbeforeedit(editor, e, eop) {
 2                 //得到选择器控件
 3                 var edcmp = e.column.getEditor();
 4                 //如果是个text
 5                 if (edcmp.getXType() == "textfield") {
 6                     //选中文字,注意延迟,
 7                     window.setTimeout(function () {
 8                         edcmp.selectText();
 9                     }, 100);
10                 }
11             }

2.封了一下上级回发的方法,以前写过,都是前台的,给封了一下下,改了源码

 1         /// <summary>
 2         /// 触发上层方法 方法名称,参数,参数,参数
 3         /// </summary>
 4         /// <param name="funname">方法名称</param>
 5         /// <param name="eves">参数</param>
 6         public void ParentsCustomEvent(string funname, params string[] eves)
 7         {
 8             string eve = funname + '|' + string.Join("$", eves);
 9             //string js = "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.window.F.customEvent('" + eve + "');}})();";
10             string js = "(function(){parent.F.customEvent('" + eve + "');})();";
11             FineUI.PageContext.RegisterStartupScript(js);
12         }
13         /// <summary>
14         /// 触发上层方法 是否关闭窗体,方法名称,参数,参数,参数
15         /// </summary>
16         /// <param name="bhide">是否关闭窗体</param>
17         /// <param name="funname">方法名称</param>
18         /// <param name="eves">参数</param>
19         public void ParentsCustomEvent(bool bhide, string funname, params string[] eves)
20         {
21             string eve = funname + '|' + string.Join("$", eves);
22             string hide = "";
23             if (bhide)
24             {
25                 hide += "aw.f_hide();";
26             }
27             string js = "(function(){var aw=F.wnd.getActiveWindow();if(aw){aw.window.F.customEvent('" + eve + "');" + hide + "}})();";
28             //string js = "(function(){parent.F.customEvent('" + eve + "');})();";
29             FineUI.PageContext.RegisterStartupScript(js);
30         }

这个方法就是把得到上级给得到然后回传方法,触发上级的PageManager1_CustomEvent事件第二个是个重载,给改了,实现的目的就是可以传自己想传的参数,比如下面这个方法

1         protected void btnSaveContinue_Click(object sender, EventArgs e)
2         {
3             // 1. 这里放置保存窗体中数据的逻辑
4             //方法名称,参数
5             ParentsCustomEvent("show", "就是这么封", "就是这么封1", "就是这么封2", "就是这么封3", "就是这么封4");
6             // 2. 关闭本窗体,然后回发父窗体
7             //PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
8         }

父页面就可以写成

 1         protected void PageManager1_CustomEvent(object sender, CustomEventArgs e)
 2         {
 3             //方法名称
 4             if (e.funname == "show")
 5             {
 6                 string s = "";
 7                 //循环参数集合
 8                 foreach (string item in e.evelist)
 9                 {
10                     s += item + ";";
11                 }
12                 //事件参数
13                 Alert.Show(s);
14             }
15         }

CustomEventArgs扩展了两个参数,就是定义了一个规则罢了 既然叫自定义事件参数那就自定义好了

 1 /// <summary>
 2     /// 自定义事件参数
 3     /// </summary>
 4     public class CustomEventArgs : EventArgs
 5     {
 6         private string _eventArgument;
 7         /*扩展参数*/
 8         private List<string> _evelist;//事件参数集合
 9         private string _funname;//触发方法名称
10         /// <summary>
11         /// 触发方法名称
12         /// </summary>    
13         public string funname
14         {
15             get { return _funname; }
16             set { _funname = value; }
17         }
18         /// <summary>
19         /// 事件参数集合
20         /// </summary>    
21         public List<string> evelist
22         {
23             get { return _evelist; }
24             set { _evelist = value; }
25         }
26         /// <summary>
27         /// 事件参数
28         /// </summary>
29         public string EventArgument
30         {
31             get { return _eventArgument; }
32             set { _eventArgument = value; }
33         }
34         /// <summary>
35         /// 构造函数
36         /// </summary>
37         /// <param name="eventArgument">事件参数</param>
38         public CustomEventArgs(string eventArgument)
39         {
40             _eventArgument = eventArgument;
41             /*扩展解析方法*/
42             _evelist = new List<string>();
43             if (eventArgument.IndexOf('|') > 0)
44             {
45                 _funname = eventArgument.Split('|')[0];
46                 string[] s = eventArgument.Split('|')[1].Split('$');
47                 for (int i = 0; i < s.Length; i++)
48                 {
49                     _evelist.Add(s[i]);
50                 }
51             }
52         }
53     }

 

没必要向我这么写,只是给了灵感吧
3.也是在论坛上看见的,我新想最起码攒三个在写博客,今天就看见了,查了查,封个方法就可以了
请问FineUI开源版中如何实现Grid保持行选中状态?就好像专业版中的 KeepCurrentSelection ,例子在这里 http://fineui.com/demo_pro/#/dem ... rrentselection.aspx。感觉这个很有用,现在开原版多选行只能按住Ctrl键实现点击每一行的任意位置多选,而且很容易误操作。
extjs 是有这个参数的,就是给写到源码里了
Grid.cs 文件新增属性
 1    /// <summary>
 2         /// 启用保存多行选择
 3         /// </summary>
 4         [Category(CategoryName.OPTIONS)]
 5         [DefaultValue(true)]
 6         [Description("启用多行选择")]
 7         public bool KeepCurrentSelection
 8         {
 9             get
10             {
11                 object obj = FState["KeepCurrentSelection"];
12                 return obj == null ? false : (bool)obj;
13             }
14             set
15             {
16                 FState["KeepCurrentSelection"] = value;
17             }
18         }

3534行改下

 1                 if (EnableMultiSelect)
 2                 {
 3                     if (KeepCurrentSelection)
 4                     {
 5                         selectOB.AddProperty("mode", "SIMPLE");
 6                     }
 7                     else
 8                     {
 9                         selectOB.AddProperty("mode", "MULTI");
10                     }
11                 }

就可以了,环境是4.2.2

 
源码啥的都考走吧,也不截图了,没啥可玩的,就是好久不写,凑个一章算是 2015 最后一炮,大家跨年吉祥
 

 

 

posted on 2015-12-31 12:30  走路要用腿  阅读(1413)  评论(0编辑  收藏  举报

导航

QQ:@北京-没想好