zoukankan      html  css  js  c++  java
  • k/3cloud表格控件块粘贴代码逻辑

    大家可以在表单插件EntityBlockPasting事件中自己处理,然后将cancel设置为true。以下代码可以参考一下,插件代码中需要将其中一些属性或方法修改,例如this.BusinessInfo替换为this.View.BusinessInfo,UpdateValue替换为this.View.Model.SetValue,this.StyleManager替换为((IDynamicFormView)this.View).StyleManager

            /// <summary>
            /// 块拷贝
            /// </summary>
            /// <param name="startKey"></param>
            /// <param name="startRow"></param>
            /// <param name="blockValue"></param>
            public void EntityBlockPasting(string startKey, int startRow, string blockValue)
            {
                if (!blockValue.IsNullOrEmptyOrWhiteSpace())
                {
                    EntityBlockPastingEventArgs args = new EntityBlockPastingEventArgs(startKey, startRow, blockValue);
                    this.EventsProxy.FireEntityBlockPasting(args);
                    if (args.Cancel)
                    {
                        return;
                    }
                    Field fd = this.BusinessInfo.GetField(startKey);
                    if (fd == null) return;
                    int entityRowCount = this.Model.GetEntryRowCount(fd.EntityKey);
                    string[] rowValues = blockValue.Split('
    ');
                    int blockRowCount = rowValues.Length-1;
                    if (blockRowCount > entityRowCount)
                    {
                        // 当前实体行数不足,补齐行数据
                        for (int i = entityRowCount; i < blockRowCount; i++)
                        {
                            this.Model.CreateNewEntryRow(fd.EntityKey);
                        }
                    }
                    Dictionary<int, string> fieldKeyList = new Dictionary<int, string>();
                    int row = startRow;
                    foreach (string strValue in rowValues)
                    {
                        if (strValue.IsNullOrEmpty())
                        {
                            // 最后空行结束
                            return;
                        }
                        string[] strs = strValue.Split('	');
                        int fieldCount = strs.Length;
                        SetFieldKeyList(startKey, fd, fieldKeyList);
                        if (fieldKeyList.Count == 0)
                        {
                            // 可能找不到列,则返回
                            return;
                        }
                        int index = 0;
                        foreach (string str in strs)
                        {
                            string key = fieldKeyList[index];
                            // 未锁定状态下更新数据,锁定跳过
                            if (this.StyleManager.GetEnabled(this.LayoutInfo.GetFieldAppearance(key)))
                            {
                                this.UpdateValue(fieldKeyList[index], row, str);
                            }
                            index++;
                        }
                        row++;
                    }
                }
            }
            private void SetFieldKeyList(string startKey, Field fd, Dictionary<int, string> fieldKeyList)
            {
                if (fieldKeyList.Count > 0)
                {
                    return;
                }
                int start = 0;
                List<Field> fields = new List<Field>();
                fields.AddRange(fd.Entity.Fields);
                fields.Sort(new Comparison<Field>((x, y) =>
                {
                    return x.Tabindex.CompareTo(y.Tabindex);
                }));
                foreach (Field f in fields)
                {
                    if (startKey.EqualsIgnoreCase(f.Key))
                    {
                        fieldKeyList[start++] = f.Key;
                        continue;
                    }
                    if (start > 0)
                    {
                        // 可见的列才被用来粘贴
                        if (this.StyleManager.GetVisible(this.LayoutInfo.GetFieldAppearance(f.Key)))
                        {
                            fieldKeyList[start++] = f.Key;
                            continue;
                        }
                    }
                }
            }


  • 相关阅读:
    ES6对象的扩展
    ES6函数的扩展
    ES6新增变量
    ES6框架的搭建
    自适应布局 左右结构、上下结构
    iframe 子页面改变父页面样式
    检测终端类型
    $.grep()
    点击元素内部不隐藏,点击元素外部元素隐藏
    angular表单验证
  • 原文地址:https://www.cnblogs.com/fyq891014/p/4188789.html
Copyright © 2011-2022 走看看