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;
                        }
                    }
                }
            }


  • 相关阅读:
    Python学习--10 面向对象编程
    Python学习--09 模块
    Python学习--08函数式编程
    JSON的简单例子
    error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
    Failed to create the Java Virtual Machine.问题的解决
    导入项目时Loading descriptor ...
    Tomcat Server Timeouts属性的设置
    Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement
    MySQL的Incorrect string value错误
  • 原文地址:https://www.cnblogs.com/fyq891014/p/4188789.html
Copyright © 2011-2022 走看看