• 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 最后一炮,大家跨年吉祥
     
  • 相关阅读:
    深入 HBase 架构解析(2)
    [HEOI2012]朋友圈
    图论常用概念整理
    [COGS2175][SDOI2012]象棋-二分图最大权匹配
    KMP算法
    数据结构部分整理
    最小费用最大流学习笔记
    动态开点线段树
    Splay 模板
    C++ P1164 小A点菜
  • 原文地址:https://www.cnblogs.com/shiworkyue/p/5091341.html
Copyright © 2020-2023  润新知