博客地址 http://blog.csdn.net/foxdave

本篇讲解一个有些新颖的SharePoint实例应用,给甲方做过项目的都有过体会,数据太多了,客户有Excel,要求实现批量导入。

效果图大致如下所示

此实例是借用列表的数据视图实现导入,数据视图类似Excel,所以可以直接在上面编辑,甚至从Excel中直接粘贴进去,然后点击保存将数据插入到列表中。

首先,我们需要有一个列表,这个列表的字段跟Excel是对应的,在我的实例中选择创建列表定义及列表实例(怎么创建项目不多废话了)

创建方法戳这里

写完列表实例之后,添加一个作用于列表的事件接收器,用来处理后台操作。添加一个事件接收器,勾选正在删除、已添加和已更新事件,完成创建。

编写核心代码就可以了,在我们的实际应用中,做了一个临时表用来处理这里的数据,点击页面的保存之后再转到真实的数据表。

/// <summary>
/// 正在删除项.
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
base.ItemDeleting(properties);
SPListItem item = properties.ListItem;
SPMIPEntities entities = new SPMIPEntities();
string uniqueId = item.UniqueId.ToString();
ZY_YeZhqdjch_Temp temp = (from p in entities.ZY_YeZhqdjch_Temp where p.UniqueId.Equals(uniqueId) select p).FirstOrDefault();
entities.DeleteObject(temp);
entities.SaveChanges();
} /// <summary>
/// 已添加项.
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
SPListItem item = properties.ListItem;
SPMIPEntities entities = new SPMIPEntities();
ZY_YeZhqdjch_Temp temp = new ZY_YeZhqdjch_Temp();
string a = properties.UserLoginName;
//获取登录者账号
string username = properties.UserLoginName.Substring(properties.UserLoginName.IndexOf("spmipmp|") + 8);
var list = from p in entities.SYS_User where (p.UserCode.Equals(username)) select new { p.UserCode, p.Zhi_gid };
DataTable dt = IQueryableExtensions.ToDataTable(list);
//获取登录者ID
temp.Chuang_jzh = Convert.ToInt32(dt.Rows[0]["Zhi_gid"]);
temp.UniqueId = item.UniqueId.ToString(); if (item["业主清单编码"] == null) { temp.Ye_zhqdbm = ""; }
else { temp.Ye_zhqdbm = item["业主清单编码"].ToString(); }
if (item["业主清单名称"] == null) { temp.Ye_zhqdmch = ""; }
else { temp.Ye_zhqdmch = item["业主清单名称"].ToString(); }
if (item["清单项目特征"] == null) { temp.Qing_dxmtzh = ""; }
else { temp.Qing_dxmtzh = item["清单项目特征"].ToString(); }
if (item["单位"] == null) { temp.Dan_w = ""; }
else { temp.Dan_w = item["单位"].ToString(); }
if (item["清单量"] == null) { temp.Qing_dl = 0; }
else { temp.Qing_dl = Convert.ToDecimal(item["清单量"]); }
if (item["签证量"] == null) { temp.Qian_zhl = 0; }
else { temp.Qian_zhl = Convert.ToDecimal(item["签证量"]); }
if (item["验收量"] == null) { temp.Yan_shl = 0; }
else { temp.Yan_shl = Convert.ToDecimal(item["验收量"]); }
if (item["合同单价"] == null) { temp.He_tdj = 0; }
else { temp.He_tdj = Convert.ToDecimal(item["合同单价"]); }
if (item["业主签认单价"] == null) { temp.Ye_zhqrdj = 0; }
else { temp.Ye_zhqrdj = Convert.ToDecimal(item["业主签认单价"]); }
if (item["预计决算单价"] == null) { temp.Yu_jjsdj = 0; }
else { temp.Yu_jjsdj = Convert.ToDecimal(item["预计决算单价"]); }
if (item["预计审减比例"] == null) { temp.Yu_jshjbl = 0; }
else { temp.Yu_jshjbl = Convert.ToDecimal(item["预计审减比例"]); }
if (item["决算单价"] == null) { temp.Jue_sdj = 0; }
else { temp.Jue_sdj = Convert.ToDecimal(item["决算单价"]); }
entities.AddToZY_YeZhqdjch_Temp(temp);
entities.SaveChanges();
} /// <summary>
/// 已更新项.
/// </summary>
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
SPListItem item = properties.ListItem;
SPMIPEntities entities = new SPMIPEntities();
string uniqueId = item.UniqueId.ToString();
ZY_YeZhqdjch_Temp temp = (from p in entities.ZY_YeZhqdjch_Temp where p.UniqueId.Equals(uniqueId) select p).FirstOrDefault();
//获取登录者账号
string username = properties.UserLoginName.Substring(properties.UserLoginName.IndexOf("spmipmp|") + 8);
var list = from p in entities.SYS_User where (p.UserCode.Equals(username)) select new { p.UserCode, p.Zhi_gid };
DataTable dt = IQueryableExtensions.ToDataTable(list);
//获取登录者ID
temp.Chuang_jzh = Convert.ToInt32(dt.Rows[0]["Zhi_gid"]);
if (item["业主清单编码"] == null) { temp.Ye_zhqdbm = ""; }
else { temp.Ye_zhqdbm = item["业主清单编码"].ToString(); }
if (item["业主清单名称"] == null) { temp.Ye_zhqdmch = ""; }
else { temp.Ye_zhqdmch = item["业主清单名称"].ToString(); }
if (item["清单项目特征"] == null) { temp.Qing_dxmtzh = ""; }
else { temp.Qing_dxmtzh = item["清单项目特征"].ToString(); }
if (item["单位"] == null) { temp.Dan_w = ""; }
else { temp.Dan_w = item["单位"].ToString(); }
if (item["清单量"] == null) { temp.Qing_dl = 0; }
else { temp.Qing_dl = Convert.ToDecimal(item["清单量"]); }
if (item["签证量"] == null) { temp.Qian_zhl = 0; }
else { temp.Qian_zhl = Convert.ToDecimal(item["签证量"]); }
if (item["验收量"] == null) { temp.Yan_shl = 0; }
else { temp.Yan_shl = Convert.ToDecimal(item["验收量"]); }
if (item["合同单价"] == null) { temp.He_tdj = 0; }
else { temp.He_tdj = Convert.ToDecimal(item["合同单价"]); }
if (item["业主签认单价"] == null) { temp.Ye_zhqrdj = 0; }
else { temp.Ye_zhqrdj = Convert.ToDecimal(item["业主签认单价"]); }
if (item["预计决算单价"] == null) { temp.Yu_jjsdj = 0; }
else { temp.Yu_jjsdj = Convert.ToDecimal(item["预计决算单价"]); }
if (item["预计审减比例"] == null) { temp.Yu_jshjbl = 0; }
else { temp.Yu_jshjbl = Convert.ToDecimal(item["预计审减比例"]); }
if (item["决算单价"] == null) { temp.Jue_sdj = 0; }
else { temp.Jue_sdj = Convert.ToDecimal(item["决算单价"]); }
entities.SaveChanges();
}

接下来,我们想更自动化一些,自动创建出这个列表的数据视图并设置为默认视图,用于专门的导入操作

处理FeatureActivated事件,实例中的核心代码如下

SPWeb _web = properties.Feature.Parent as SPWeb;
SPList list = _web.Lists.TryGetList("业主清单基础导入");
SPList listTwo = _web.Lists.TryGetList("内部清单基础导入");
SPView newView = null;
SPView newViewTwo = null;
string strQuery = default(string);
string strQueryTwo = default(string);
StringCollection strCol = new StringCollection();
StringCollection strColTwo = new StringCollection();
newView = list.Views.Cast<SPView>().FirstOrDefault(v => v.Title == "业主清单基础");
if (newView == null)
{
strCol.Clear();
strCol.Add("Title");
strCol.Add("Ye_zhqdmch");
strCol.Add("Qing_dxmtzh");
strCol.Add("Dan_w");
strCol.Add("Qing_dl");
strCol.Add("Qian_zhl");
strCol.Add("Yan_shl");
strCol.Add("He_tdj");
strCol.Add("Ye_zhqrdj");
strCol.Add("Yu_jjsdj");
strCol.Add("Yu_jshjbl");
strCol.Add("Jue_sdj");
newView = list.Views.Add("Default", strCol, strQuery, 30, true/**//*是否支持分页*/, true/**//*是否是默认视图*/,
Microsoft.SharePoint.SPViewCollection.SPViewType.Grid, false);
newView.Title = "业主清单基础";
newView.Update();
}
newViewTwo = listTwo.Views.Cast<SPView>().FirstOrDefault(v => v.Title == "内部清单基础");
if (newViewTwo == null)
{
strColTwo.Clear();
strColTwo.Add("Title");
strColTwo.Add("Nei_bqdbm");
strColTwo.Add("Nei_bqdmch");
strColTwo.Add("Xiang_mtzh");
strColTwo.Add("Dan_w");
strColTwo.Add("Gong_chshl");
strColTwo.Add("Ding_e");
strColTwo.Add("Ren_gf");
strColTwo.Add("Ji_xf");
strColTwo.Add("Qu_ybm");
strColTwo.Add("Qu_ymch");
newViewTwo = listTwo.Views.Add("Default", strColTwo, strQueryTwo, 30, true/**//*是否支持分页*/, true/**//*是否是默认视图*/,
Microsoft.SharePoint.SPViewCollection.SPViewType.Grid, false);
newViewTwo.Title = "内部清单基础";
newViewTwo.Update();
}

最后一步,在应用程序页上应用它(这里我只是描述实例的情况,具体怎么应用可以自行选择),在页面上添加一个iframe元素,引入列表视图的URL地址就可以了。

SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)的更多相关文章

  1. Excel数据导入到Sharepoint List

    这个功能是从XML中读取需要导入到Sharepoint List的列名字,然后把Excel中对应的数据导入到Sharepoint List中.基本原理,把Excel中数据临时放到Datatable中, ...

  2. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

  3. SharePoint 2013开发入门探索(一)- 自定义列表

    在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...

  4. Excel 批量导入Mysql(创建表-追加数据)

    之前弄数据库的时候, 测试excel导mysql, 中间用pandas 处理后再入库.  直接上代码, 此种有真意, 尽在不言中. #!/usr/bin/env python # coding: ut ...

  5. C#中Excel的导入和导出的几种基本方式

    在上一篇(http://www.cnblogs.com/fengchengjushi/p/3369386.html)介绍过,Excel也是数据持久化的一种实现方式.在C#中.我们常常会与Excel文件 ...

  6. HFun.快速开发平台(二)=》自定义列表实例(请求参数的处理)

    上编描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /************************************ ...

  7. HFun.快速开发平台(四)=》自定义列表实例(请求参数的处理)

    上编自定义列表描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /******************************* ...

  8. HFun.快速开发平台(二)=》自定义列表实例

    应用系统中数据列表的展现是开发内容之一,实现的方式基本是通过编号具体的访问列表页实现,通过检索条件进行数据源的获取,列字段的描述,还可能会有检索条件的实现,列表数据的导出等功能. 为了将重复工作进行简 ...

  9. 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

    阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...

  10. 从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

    阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephis ...

随机推荐

  1. easyui 上传文件代码

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;usi ...

  2. 图片左右滚动的js代码

    html代码 <div class="demo" id="demo" style="overflow:hidden; width:660px; ...

  3. 例题:打印乘法口诀。可能大家一看有点难,但只要理解for 循环嵌套,两层循环,外层循环行数,里层循环列数,搞清楚行数和列数之间的关系,就可以轻松做出这道题

    namespace 打印乘法口诀{    class Program    {        static void Main(string[] args)        {            f ...

  4. 【bzoj1043】下落的圆盘

    [bzoj1043]下落的圆盘 题意 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. \(1\leq n\leq 1000\ ...

  5. navigator.userAgent.indexOf来判断浏览器类型

    navigator.userAgent.indexOf来判断浏览器类型 (2011-03-03 11:30:40) 转载▼ 标签: 杂谈   来源:http://xtaai5233.blog.163. ...

  6. 静态类和静态类成员(C# 编程指南)

    静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 Util ...

  7. python 练习 19

    #!/usr/bin/python # -*- coding: UTF-8 -*- for n in range(100,1000): i = n / 100 j = n / 10 % 10 k = ...

  8. CentOS 7.x安装配置

    简述 VMware可以创建多个虚拟机,每个虚拟机上都可以安装各种类型的操作系统.安装方法也有很多种.下面,主要以ISO镜像安装为例,介绍CentOS 7.x的安装过程及相关的参数设置. 简述 创建虚拟 ...

  9. addViewController之后view里面的点击事件不响应

    let dealsSeeMoreViewController = DealsSeeMoreViewController(owner: self) self.dealsStackView.addArra ...

  10. 《JavaScript权威指南》读书笔记(三)

    日期:2015-12-05 浏览器location和history: replace不会显示历史,location会: history对象脚本不能真正访问,但支持三种方法:back().foward( ...