1、bootstrap-fileinpu的简单介绍
在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作。
关于这个插件,我在早期随笔《》也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x 的扩展,实现文件上传预览,多文件上传等功能。
这个插件主要是介绍如何处理图片上传的处理操作,原先我的Excel导入操作使用的是Uploadify插件,可以参考我随笔《》,不过这个需要Flash控件支持,在某些浏览器(如Chrome)就比较麻烦了,因此决定使用一种较为通用的上传插件,这次首先对基于Bootstrap前端架构的框架系统进行升级,替代原来的Uploadify插件,这样页面上传功能,在各个浏览器就可以无差异的实现了。
一般情况下,我们需要引入下面两个文件,插件才能正常使用:
在File input 插件使用的时候,如果是基于Asp.NET MVC的,那么我们可以使用BundleConfig.cs进行添加对应的引用,加入到Bundles集合引用即可。
在页面中,我们使用以下HTML代码实现界面展示,主要的bootstrap fileinput插件声明,主要是基础的界面代码
Excel导入的的界面展示如下所示。
选择指定文件后,我们可以看到Excel的文件列表,如下界面所示。
上传文件后,数据直接展示在弹出层的列表里面,这里直接使用了 Bootstrap-table表格插件进行展示。
这样我们就可以把Excel的记录展示出来,实现了预览的功能,勾选必要的记录,然后保存即可提交到服务器进行保存,实现了Excel数据的真正导入数据库处理。
2、Excel导出操作详细介绍
我们在实际导入Excel的界面中,HTML代码如下所示。
<span style="color: #008000;"><!--</span><span style="color: #008000;">数据显示表格</span><span style="color: #008000;">--></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">table </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="gridImport"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="table table-striped table-bordered table-hover"</span><span style="color: #ff0000;"> cellpadding</span><span style="color: #0000ff;">="0"</span><span style="color: #ff0000;"> cellspacing</span><span style="color: #0000ff;">="0"</span><span style="color: #ff0000;"> border</span><span style="color: #0000ff;">="0"</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">table</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="modal-footer"</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">button </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="button"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="btn btn-default"</span><span style="color: #ff0000;"> data-dismiss</span><span style="color: #0000ff;">="modal"</span><span style="color: #0000ff;">></span>关闭<span style="color: #0000ff;"></</span><span style="color: #800000;">button</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><</span><span style="color: #800000;">button </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="button"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="btn btn-primary"</span><span style="color: #ff0000;"> onclick</span><span style="color: #0000ff;">="SaveImport()"</span><span style="color: #0000ff;">></span>保存<span style="color: #0000ff;"></</span><span style="color: #800000;">button</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></
<span style="color: #800000;">div<span style="color: #0000ff;">>对于bootstrap fileinput的各种属性,我们这里使用JS进行初始化,这样方便统一管理和修改。
$(</span>"#excelFile"<span style="color: #000000;">).fileinput({
uploadUrl: </span>"/FileUpload/Upload",<span style="color: #008000;">//</span><span style="color: #008000;">上传的地址</span>
uploadAsync: <span style="color: #0000ff;">true</span>,<span style="color: #008000;">//</span><span style="color: #008000;">异步上传</span>
language: "zh",<span style="color: #008000;">//</span><span style="color: #008000;">设置语言</span>
showCaption: <span style="color: #0000ff;">true</span>,<span style="color: #008000;">//</span><span style="color: #008000;">是否显示标题</span>
showUpload: <span style="color: #0000ff;">true</span>,<span style="color: #008000;">//</span><span style="color: #008000;">是否显示上传按钮</span>
showRemove: <span style="color: #0000ff;">true</span>,<span style="color: #008000;">//</span><span style="color: #008000;">是否显示移除按钮</span>
showPreview : <span style="color: #0000ff;">true</span>,<span style="color: #008000;">//</span><span style="color: #008000;">是否显示预览按钮</span>
browseClass: "btn btn-primary",<span style="color: #008000;">//</span><span style="color: #008000;">按钮样式 </span>
dropZoneEnabled: <span style="color: #0000ff;">false</span>,<span style="color: #008000;">//</span><span style="color: #008000;">是否显示拖拽区域</span>
allowedFileExtensions: ["xls","xlsx"],<span style="color: #008000;">//</span><span style="color: #008000;">接收的文件后缀</span>
maxFileCount: 1,<span style="color: #008000;">//</span><span style="color: #008000;">最大上传文件数限制</span>
previewFileIcon: '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,allowedPreviewTypes: </span><span style="color: #0000ff;">null</span><span style="color: #000000;">,previewFileIconSettings: {
</span>'docx': '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,</span>'xlsx': '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,</span>'pptx': '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,</span>'jpg': '<i class="glyphicon glyphicon-picture"></i>'<span style="color: #000000;">,</span>'pdf': '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,</span>'zip': '<i class="glyphicon glyphicon-file"></i>'<span style="color: #000000;">,},uploadExtraData: { </span><span style="color: #008000;">//</span><span style="color: #008000;">上传的时候,增加的附加参数</span>
folder: '数据导入文件',guid: $("#AttachGUID"<span style="color: #000000;">).val()
}
}) </span><span style="color: #008000;">//</span><span style="color: #008000;">文件上传完成后的事件</span>
.on('fileuploaded',<span style="color: #0000ff;">function</span><span style="color: #000000;"> (event,data,previewId,index) {
</span><span style="color: #0000ff;">var</span> form = data.form,files = data.files,extra =<span style="color: #000000;"> data.extra,response </span>= data.response,reader =<span style="color: #000000;"> data.reader;
</span><span style="color: #0000ff;">var</span> res = data.response; <span style="color: #008000;">//</span><span style="color: #008000;">返回结果</span>
<span style="color: #0000ff;">if</span><span style="color: #000000;"> (res.Success) {
showTips(</span>'上传成功'<span style="color: #000000;">);
</span><span style="color: #0000ff;">var</span> guid = $("#AttachGUID"<span style="color: #000000;">).val();
</span><span style="color: #008000;">//</span><span style="color: #008000;">提示用户Excel格式是否正常,如果正常加载数据</span>
<span style="color: #000000;"> $.ajax({
url:
<span style="color: #0000ff;">if<span style="color: #000000;"> (data.Success) {
InitImport(guid); <span style="color: #008000;">//<span style="color: #008000;">重新刷新表格数据
showToast("文件已上传,数据加载完毕!"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">重新刷新GUID,以及清空文件,方便下一次处理</span>
<span style="color: #000000;"> RefreshExcel();
}
<span style="color: #0000ff;">else<span style="color: #000000;"> {
showToast("上传的Excel文件检查不通过。请根据页面右上角的Excel模板格式进行数据录入。","error"<span style="color: #000000;">);
}
}
});
}
<span style="color: #0000ff;">else<span style="color: #000000;"> {
showTips('上传失败'<span style="color: #000000;">);
}
});
}
上面的逻辑具体就是,设置上传文件的后台页面为:/FileUpload/Upload,以及各种插件的配置参数,uploadExtraData里面设置的是提交的附加参数,也就是后台控制器接收的参数,其中
的函数处理文件上传后的处理函数,如果上传文件返回的结果是成功的,那么我们再次调用ajax来检查这个Excel的字段是否符合要求,如下地址:
如果这个检查的后台返回成功的记录,那么再次需要把Excel记录提取出来预览,并清空bootstrap fileinput文件上传插件,方便下次上传文件。如下代码所示。
</span><span style="color: #008000;">//</span><span style="color: #008000;">重新刷新GUID,以及清空文件,方便下一次处理</span>
<span style="color: #000000;"> RefreshExcel();
}
showToast("上传的Excel文件检查不通过。请根据页面右上角的Excel模板格式进行数据录入。","error"<span style="color: #000000;">);
}
其中RefreshExcel就是重新更新上传的附加参数值,方便下次上传,否则附加参数的值一直不变化,就会导致我们设置的GUID没有变化而出现问题。
<span style="color: #008000;">//</span><span style="color: #008000;">附加参数初始化后一直不会变化,如果需要发生变化,则需要使用refresh进行更新</span>
$('#excelFile').fileinput('refresh'<span style="color: #000000;">,{
uploadExtraData: { folder: </span>'数据导入文件',guid: $("#AttachGUID"<span style="color: #000000;">).val() },});
}</span></pre>
而其中InitImport就是获取预览数据并展示在Bootstrap-table表格插件上的,关于这个插件的详细使用,可以回顾下随笔《》进行了解即可。
最后就是确认提交后,会通过JS提交数据到后台进行处理,如下代码所示。
</span><span style="color: #0000ff;">var</span> list = [];<span style="color: #008000;">//</span><span style="color: #008000;">构造集合对象</span>
<span style="color: #0000ff;">var</span> rows = $import.bootstrapTable(<span style="color: #800000;">'</span><span style="color: #800000;">getSelections</span><span style="color: #800000;">'</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">var</span> i = <span style="color: #800080;">0</span>; i < rows.length; i++<span style="color: #000000;">) {
list.push({
</span><span style="color: #800000;">'</span><span style="color: #800000;">Name</span><span style="color: #800000;">'</span>: rows[i].Name,<span style="color: #800000;">'</span><span style="color: #800000;">Mobile</span><span style="color: #800000;">'</span>: rows[i].Mobile,<span style="color: #800000;">'</span><span style="color: #800000;">Email</span><span style="color: #800000;">'</span>: rows[i].Email,<span style="color: #800000;">'</span><span style="color: #800000;">Homepage</span><span style="color: #800000;">'</span><span style="color: #000000;">: rows[i].Homepage,</span><span style="color: #800000;">'</span><span style="color: #800000;">Hobby</span><span style="color: #800000;">'</span>: rows[i].Hobby,<span style="color: #800000;">'</span><span style="color: #800000;">Gender</span><span style="color: #800000;">'</span>: rows[i].Gender,<span style="color: #800000;">'</span><span style="color: #800000;">Age</span><span style="color: #800000;">'</span>: rows[i].Age,<span style="color: #800000;">'</span><span style="color: #800000;">BirthDate</span><span style="color: #800000;">'</span><span style="color: #000000;">: rows[i].BirthDate,</span><span style="color: #800000;">'</span><span style="color: #800000;">Height</span><span style="color: #800000;">'</span>: rows[i].Height,<span style="color: #800000;">'</span><span style="color: #800000;">Note</span><span style="color: #800000;">'</span><span style="color: #000000;">: rows[i].Note
});
}
</span><span style="color: #0000ff;">if</span> (list.length == <span style="color: #800080;">0</span><span style="color: #000000;">) {
showToast(</span><span style="color: #800000;">"</span><span style="color: #800000;">请选择一条记录</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">warning</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">var</span> postData = { <span style="color: #800000;">'</span><span style="color: #800000;">list</span><span style="color: #800000;">'</span>: list };<span style="color: #008000;">//</span><span style="color: #008000;">可以<a href="https://www.jb51.cc/tag/zengjia/" target="_blank" class="keywords">增加</a>其他参数,如{ 'list': list,'Rucanghao': $("#Rucanghao").val() };</span>
postData =<span style="color: #000000;"> JSON.stringify(postData);
$.ajax({
url: </span><span style="color: #800000;">'</span><span style="color: #800000;">/TestUser/SaveExcelData</span><span style="color: #800000;">'</span><span style="color: #000000;">,type: </span><span style="color: #800000;">'</span><span style="color: #800000;">post</span><span style="color: #800000;">'</span><span style="color: #000000;">,dataType: </span><span style="color: #800000;">'</span><span style="color: #800000;">json</span><span style="color: #800000;">'</span><span style="color: #000000;">,contentType: </span><span style="color: #800000;">'</span><span style="color: #800000;">application/json;charset=utf-8</span><span style="color: #800000;">'</span><span style="color: #000000;">,traditional: </span><span style="color: #0000ff;">true</span><span style="color: #000000;">,success: function (data) {
</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (data.Success) {
</span><span style="color: #008000;">//</span><span style="color: #008000;">保存成功 1.<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>弹出层,2.清空记录<a href="https://www.jb51.cc/tag/xianshi/" target="_blank" class="keywords">显示</a> 3.刷新主列表</span>
showToast(<span style="color: #800000;">"</span><span style="color: #800000;">保存成功</span><span style="color: #800000;">"</span><span style="color: #000000;">);
$(</span><span style="color: #800000;">"</span><span style="color: #800000;">#import</span><span style="color: #800000;">"</span>).modal(<span style="color: #800000;">"</span><span style="color: #800000;">hide</span><span style="color: #800000;">"</span><span style="color: #000000;">);
$(bodyTag).html(</span><span style="color: #800000;">""</span><span style="color: #000000;">);
Refresh();
}
</span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
showToast(</span><span style="color: #800000;">"</span><span style="color: #800000;">保存失败:</span><span style="color: #800000;">"</span> + data.ErrorMessage,<span style="color: #800000;">"</span><span style="color: #800000;">error</span><span style="color: #800000;">"</span><span style="color: #000000;">);
}
},data: postData
});
}</span></pre>
3、后台控制器代码分析
这里我们的JS代码里面,涉及了几个MVC后台的方法处理:Upload、CheckExcelColumns、GetExcelData、SaveExcelData。这里分别进行介绍。
HttpFileCollectionBase files </span>=<span style="color: #000000;"> HttpContext.Request.Files;
</span><span style="color: #0000ff;">if</span> (files != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
</span><span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">string</span> key <span style="color: #0000ff;">in</span><span style="color: #000000;"> files.Keys)
{
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">
{
</span><span style="color: #0000ff;">#region</span> MyRegion<span style="color: #000000;">
HttpPostedFileBase fileData </span>=<span style="color: #000000;"> files[key];
</span><span style="color: #0000ff;">if</span> (fileData != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
HttpContext.Request.ContentEncoding </span>= Encoding.GetEncoding(<span style="color: #800000;">"</span><span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">);
HttpContext.Response.ContentEncoding </span>= Encoding.GetEncoding(<span style="color: #800000;">"</span><span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">);
HttpContext.Response.Charset </span>= <span style="color: #800000;">"</span><span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;"> <a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/shangchuan/" target="_blank" class="keywords">上传</a>后的保存路径</span>
<span style="color: #0000ff;">string</span> filePath = Server.MapPath(<span style="color: #800000;">"</span><span style="color: #800000;">~/UploadFiles/</span><span style="color: #800000;">"</span><span style="color: #000000;">);
DirectoryUtil.AssertDirExist(filePath);
</span><span style="color: #0000ff;">string</span> fileName = Path.GetFileName(fileData.FileName); <span style="color: #008000;">//</span><span style="color: #008000;">原始<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a></span>
<span style="color: #0000ff;">string</span> fileExtension = Path.GetExtension(fileName); <span style="color: #008000;">//</span><span style="color: #008000;"><a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>扩展名
</span><span style="color: #008000;">//</span><span style="color: #008000;">string saveName = Guid.NewGuid().ToString() + fileExtension; </span><span style="color: #008000;">//</span><span style="color: #008000;">保存<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="https://www.jb51.cc/tag/mingcheng/" target="_blank" class="keywords">名称</a></span>
<span style="color: #000000;">
FileUploadInfo info
info.FileData =<span style="color: #000000;"> ReadFileBytes(fileData);
<span style="color: #0000ff;">if (info.FileData != <span style="color: #0000ff;">null<span style="color: #000000;">)
{
info.FileSize =<span style="color: #000000;"> info.FileData.Length;
}
info.Category =<span style="color: #000000;"> folder;
info.FileName =<span style="color: #000000;"> fileName;
info.FileExtend =<span style="color: #000000;"> fileExtension;
info.AttachmentGUID =<span style="color: #000000;"> guid;
info.AddTime </span>=<span style="color: #000000;"> DateTime.Now;
info.Editor </span>= CurrentUser.Name;<span style="color: #008000;">//</span><span style="color: #008000;"><a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>人</span>
<span style="color: #000000;">
result
{
LogTextHelper.Error(<span style="color: #800000;">"<span style="color: #800000;">上传文件失败:<span style="color: #800000;">" +<span style="color: #000000;"> result.ErrorMessage);
}
}
<span style="color: #0000ff;">#endregion<span style="color: #000000;">
}
<span style="color: #0000ff;">catch<span style="color: #000000;"> (Exception ex)
{
result.ErrorMessage =<span style="color: #000000;"> ex.Message;
LogTextHelper.Error(ex);
}
}
}
<span style="color: #0000ff;">else<span style="color: #000000;">
{
result.ErrorMessage = <span style="color: #800000;">"<span style="color: #800000;">fileData对象为空<span style="color: #800000;">"<span style="color: #000000;">;
}
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ToJsonContent(result);
}</span></pre>
文件上传处理后,返回一个通用的CommonResult 的结果对象,也方便我们在JS客户端进行判断处理。
而其中检查我们导入Excel的数据是否满足列要求的处理,就是判断它的数据列和我们预先设置好的列名是否一致即可。
</span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 检查Excel<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>的字段是否包含了必须的字段
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="guid"></span><span style="color: #008000;">附件的GUID</span><span style="color: #808080;"></param></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
<span style="color: #0000ff;">public</span> ActionResult CheckExcelColumns(<span style="color: #0000ff;">string</span><span style="color: #000000;"> guid)
{
CommonResult result </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> CommonResult();
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">
{
DataTable dt </span>=<span style="color: #000000;"> ConvertExcelFileToTable(guid);
</span><span style="color: #0000ff;">if</span> (dt != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
</span><span style="color: #008000;">//</span><span style="color: #008000;">检查列表是否包含必须的字段</span>
result.Success =<span style="color: #000000;"> DataTableHelper.ContainAllColumns(dt,columnString);
}
}
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception ex)
{
LogTextHelper.Error(ex);
result.ErrorMessage </span>=<span style="color: #000000;"> ex.Message;
}
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ToJsonContent(result);
}</span></pre>
而GetExcelData则是格式化Excel数据到具体的List
List</span><TestUserInfo> list = <span style="color: #0000ff;">new</span> List<TestUserInfo><span style="color: #000000;">();
DataTable table </span>=<span style="color: #000000;"> ConvertExcelFileToTable(guid);
</span><span style="color: #0000ff;">if</span> (table != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
</span><span style="color: #0000ff;">#region</span> 数据转换
<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">1</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">foreach</span> (DataRow dr <span style="color: #0000ff;">in</span><span style="color: #000000;"> table.Rows)
{
</span><span style="color: #0000ff;">bool</span> converted = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
DateTime dtDefault </span>= Convert.ToDateTime(<span style="color: #800000;">"</span><span style="color: #800000;">1900-01-01</span><span style="color: #800000;">"</span><span style="color: #000000;">);
DateTime dt;
TestUserInfo info </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> TestUserInfo();
info.Name </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">姓名</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Mobile </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">手机</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Email </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">邮箱</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Homepage </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">主页</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Hobby </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">兴趣爱好</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Gender </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">性别</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Age </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">年龄</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString().ToInt32();
converted </span>= DateTime.TryParse(dr[<span style="color: #800000;">"</span><span style="color: #800000;">出生日期</span><span style="color: #800000;">"</span>].ToString(),<span style="color: #0000ff;">out</span><span style="color: #000000;"> dt);
</span><span style="color: #0000ff;">if</span> (converted && dt ><span style="color: #000000;"> dtDefault)
{
info.BirthDate </span>=<span style="color: #000000;"> dt;
}
info.Height </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">身高</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString().ToDecimal();
info.Note </span>= dr[<span style="color: #800000;">"</span><span style="color: #800000;">备注</span><span style="color: #800000;">"</span><span style="color: #000000;">].ToString();
info.Creator </span>=<span style="color: #000000;"> CurrentUser.ID.ToString();
info.CreateTime </span>=<span style="color: #000000;"> DateTime.Now;
info.Editor </span>=<span style="color: #000000;"> CurrentUser.ID.ToString();
info.EditTime </span>=<span style="color: #000000;"> DateTime.Now;
list.Add(info);
}
</span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">
}
</span><span style="color: #0000ff;">var</span> result = <span style="color: #0000ff;">new</span> { total = list.Count,rows =<span style="color: #000000;"> list };
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ToJsonContent(result);
}</span></pre>
另一个SaveExcelData的函数就是处理数据导入的最终处理函数,主要就是把集合写入到具体的数据库里面即可,具体代码如下所示。
DbTransaction trans </span>= BLLFactory<TestUser><span style="color: #000000;">.Instance.CreateTransaction();
</span><span style="color: #0000ff;">if</span> (trans != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">
{
</span><span style="color: #008000;">//</span><span style="color: #008000;">int seq = 1;</span>
<span style="color: #0000ff;">foreach</span> (TestUserInfo detail <span style="color: #0000ff;">in</span><span style="color: #000000;"> list)
{
</span><span style="color: #008000;">//</span><span style="color: #008000;">detail.Seq = seq++;</span><span style="color: #008000;">//</span><span style="color: #008000;"><a href="https://www.jb51.cc/tag/zengjia/" target="_blank" class="keywords">增加</a>1</span>
detail.CreateTime =<span style="color: #000000;"> DateTime.Now;
detail.Creator </span>=<span style="color: #000000;"> CurrentUser.ID.ToString();
detail.Editor </span>=<span style="color: #000000;"> CurrentUser.ID.ToString();
detail.EditTime </span>=<span style="color: #000000;"> DateTime.Now;
BLLFactory</span><TestUser><span style="color: #000000;">.Instance.Insert(detail,trans);
}
trans.Commit();
result.Success </span>= <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception ex)
{
LogTextHelper.Error(ex);
result.ErrorMessage </span>=<span style="color: #000000;"> ex.Message;
trans.Rollback();
}
}
</span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">
}
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">
{
result.ErrorMessage </span>= <span style="color: #800000;">"</span><span style="color: #800000;">导入信息不能为空</span><span style="color: #800000;">"</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ToJsonContent(result);
}</span></pre>
上面这几个函数的代码一般是比较有规律的,不需要一个个去编写,一般通过代码生成工具Database2Sharp批量生成即可。这样可以有效提高Web的界面代码和后台代码的开发效率,减少出错的机会。
原文链接:https://www.f2er.com/bootstrap/73639.html