大家可以在表单插件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('\n');
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('\t');
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;
}
}
}
}

k/3cloud表格控件块粘贴代码逻辑的更多相关文章

  1. SNF快速开发平台MVC-EasyUI3.9之-DataGrid表格控件如何增加右键菜单

    如题,我们在项目开发当中会遇到需要,表格控件增加右键菜单的使用. 下面我们就以SNF框架增加右键菜单步骤如下: 1.在加载页面当中增加如下菜单定义 <div id="mm" ...

  2. 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入

    我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...

  3. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  4. QTableView表格控件区域选择-自绘选择区域

    目录 一.开心一刻 二.概述 三.效果展示 四.实现思路 1.绘制区域 2.绘制边框 3.绘制 五.相关文章 原文链接:QTableView表格控件区域选择-自绘选择区域 一.开心一刻 陪完客户回到家 ...

  5. QRowTable表格控件(四)-效率优化之-优化数据源

    目录 一.开心一刻 二.问题分析 三.重写数据源 1.自己存储数据 2.重写data接口 四.比较 五.相关文章 原文链接:QRowTable表格控件(四)-效率优化之-优化数据源 一.开心一刻 一程 ...

  6. 纯前端表格控件SpreadJS V12.1 隆重登场,专注易用性,提升用户体验

    ​ 一款优秀的开发工具,在更新迭代中,除了要满足不同场景的业务需求,也需不断优化已有功能,尤其是细节方面,要能为用户带来使用体验和开发效率的提升. 作为一款备受业界专家和开发者认可的纯前端类Excel ...

  7. 如何在web中实现类似excel的表格控件

    Execl功能非常强大,内置的很多函数或公式可以大大提高对数据的加工处理能力.那么在web中有没有类似的控件呢?经过一番搜寻,发现handsontable具备了基本的excel功能支持公式,同时能对数 ...

  8. 最好的Angular2表格控件

    现在市面上有大量的JavaScript数据表格控件,包括开源的第三方的和自产自销的.可以说Wijmo的Flexgrid是目前适应Angular 2的最好的表格控件. Angular 2数据表格基本要求 ...

  9. Android入门之GridView(表格控件)

    GridView是一个表格控件,可以在每个单元格中显示自定义的View或者字符串.在这里我们要实现一个图标下方有文字的效果. 1.首先我们应自定义布局文件image_text.xml.代码如下: &l ...

随机推荐

  1. LN : leetcode 746 Min Cost Climbing Stairs

    lc 746 Min Cost Climbing Stairs 746 Min Cost Climbing Stairs On a staircase, the i-th step has some ...

  2. 个人作业(alpha)

    这个作业属于哪个课程  https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里  https://edu.cn ...

  3. IDEA下MyBatis错误总结

    1. Pom.xml配置 语法顺序 <properties resource="config.properties"> </properties> < ...

  4. phpstorm中快速添加函数注释

    Preferences 或 command+,快捷键 Live Templates - PHP 下方 - 新建模板 ,Abbreviation 命名随便写,点击Edit Variables配置变量信息 ...

  5. MongoDB最简单的入门教程之一 环境搭建

    MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...

  6. python-seaborn绘图

    https://zhuanlan.zhihu.com/p/27435863 Seaborn(sns)官方文档学习笔记系列

  7. zuul 整理

    网关: 为了解决ip+端口的不友好性而产生.具有服务代理的功能nginx 功能: 1.验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求. 2.审查与监控: 在边缘位置追踪有意义数 ...

  8. Python3中的输入输出

    input()函数 我们可以通过Python3解释器查看Python3中input()的含义: >>> type(input) <class 'builtin_function ...

  9. js 时间戳 随机数 new Date().getTime()

    一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象 new Date() 来进一步获取当前的时间戳 1.var timestamp1 = Date.parse(new ...

  10. 微信小程序---目录结构

    (1)目录结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page.一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: (2)允许上传的文件 .