MVC的导入-导出

------日期的拼接
数据库传递来的日期格式和页面显示的日期格式不一样
所以要进行日期的拆分
function customDate(rowData) {
var flightDate = rowData.flightDate;
var flDate = new Date(parseInt(flightDate.replace("/Date(", “”).replace(")/", “”)));
//获取月份
var month = (flDate.getMonth() + 1) < 10 ? “0” + (flDate.getMonth() + 1) : (flDate.getMonth() + 1);
//获取日期
var date = flDate.getDate() < 10 ? “0” + flDate.getDate() : flDate.getDate();
//拼接
return flDate.getFullYear() + “-” + month + “-” + date;
}
yyyy–MM-dd-HH-mm-ss-ffff 年月日时分秒 毫秒
-------sessionStorage的使用
传递数据
可跨页面使用,进行修改页面,一个页面跳转到其他页面,进行其他页面的操作,
现在的页面
sessionStorage.setItem(“copyPNR”,“true”);
写一个标识,需要到跳转的页面获取到才能修改页面
进行页面修改时,要进行非空的判断,并且标识符的值为true
var ses= sessionStorage.getItem(“copyPNR”);//获取标识
if(ses!=null&&ses==”true”){
需要修改的本页面数据,如果这个页面有返回按钮,按钮的返回事件应该写在else里
}else{
返回页面(原页面的返回)
}
把json的字符串形式转化为json的对象形式
var str=sessionStorage.getItem(“eses”);
var strc=JSON.parse(str);//反序列化json对象
--------内连接,外连接
内连接就是取他们共有的地方。取交集。
A表 B表

右连接与左连接相反
左连接:
join tabFrequentPassengerA in myModel.S_FrequentPassenger
on tabPassenger.frequentPassengerID equals tabFrequentPassengerA.frequentPassengerID
into temp //把上面查询结果into到temp中,这个里面就会有一些空数据
from tabFrequentPassenger in temp.DefaultIfEmpty()
tabFrequentPassenger左连接得到的值
DefaultIfEmpty():如果没有值就返回一个默认的null对象
linq默认的join就是内连接
注意左连接的时候一定要用三目运算符
tabFrequentPassenger!=null?tabFrequentPassenger.frequentPassengerNo : “”
如果不为空就取当前值,否则就取一个空字符串。
什么是 Razor ?
• Razor 是一种将基于服务器的代码添加到网页中的标记语法
• Razor 具有传统 ASP.NET 标记的功能,但更容易使用并且更容易学习
• Razor 是一种服务器端标记语法,与 ASP 和 PHP 很像
• Razor 支持 C# 和 Visual Basic 编程语言

通过viewBag传递到页面

获取控制器传递的数据
书写方式:

主要的 Razor C# 语法规则
• Razor 代码块包含在 @{ … } 中
• 内联表达式(变量和函数)以 @ 开头
• 代码语句用分号结束
• 变量使用 var 关键字声明
• 字符串用引号括起来
• C# 代码区分大小写
• C# 文件的扩展名是 .cshtml
------Excel导出
1, 创建一个工作簿
NPOI.HSSF.UserModel.HSSFWorkbook workbook=newNPOI.HSSF.UserModel.HSSFWorkbook();
2, 创建一个工作表
NPOI.SS.UserModel.ISheet sheet1 = workbook.CreateSheet();
3, 修改工作表的名称
workbook.SetSheetName(0, “旅客信息”);0代表的是修改第一个表的名称
4, 创建行,行是在表的基础上创建的,设置行的高度
NPOI.SS.UserModel.IRow rowTitle = sheet1.CreateRow(0);//添加下标第一行
5, 创建单元格,单元格是在行的基础上创建
NPOI.SS.UserModel.ICell cell0 = rowTitle.CreateCell(0);
6, 设置标题行的名称
string titleert = “旅客信息”;
cell0.SetCellValue(titleert);//添加到单元格中
7, 标题行需要合并单元格
sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 6));
合并了7个单元格
8, 单元格指定样式
NPOI.SS.UserModel.ICellStyle cellstyle_title = workbook.CreateCellStyle();
9, cellstyle_title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//水平居中
10, cellstyle_title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直居中
11, 设置字体样式,把字体样式设置到单元格样式中去
cellstyle_title.SetFont(font_style);//设置单元格字体
cell0.CellStyle = cellstyle_title;//设置单元格样式
上面设置的是标题行
12, 设置表头行,创建单元格并设置值

13, ,创建表头样式,设置背景颜色,边框线,设置字体,

14, 要给一行的单元格设置样式需要用到for循环

15, 先设置表格数据,设置居中,边框
16, 遍历查到的表格数据,for循环给每一行的每一个单元格,设置样式

17, 设置单元格为自适应
//设置单元格为自适应
for (int i = 0; i < sheet1.GetRow(1).Cells.Count; i++)
{
sheet1.AutoSizeColumn(i);
sheet1.SetColumnWidth(i, sheet1.GetColumnWidth(i) * 17 / 10);
}
18, 把创建好的Excel输出到浏览器
把Excel转为流输出
定义一个流

-------Excel导入模板下载
1, 下载模板.xls
2, 用户根据模板填写数据
3, 用户上传数据—导入
4, 获取模板文件的路径把相对路径转换为绝对路径

5, 判断模板是否存在

如果不存在就return Content(导入模板不存在);
6, 以流的形式返回文件
Return File(newSystem.IO.FileStream(templateFilePath,
Ststem.IO.FileMode.Open),application/octet-stream, 用户导入模板名称.xls)
-------Excel导入模板上传
1, 使用XMLHttpRequest上传文件
2, 创建formdata对象
3, 将数据添加到formdata,formdata.append(数据)
4, 创建XMLHttpRequuest对象
Var xhr=new XMLHttpRequuest();
5,提交,文件上传使用POST提交
xhr.open(POST,”路径”)
5, 接收返回值
回调
xhr.οnlοad=function(data){

if(msg.State){

}
};
发送数据
xhr.send(formdata)

1, 获取上传的文件
2, 把文件转换为二进制数组
声明一个和文件大小一致的二进制数组
byte[] fliBytes=new byte[excelFile.ContentLength];
//将上传的文件转成二进制数组,并添加到byte里面,把input流中的数据读到fileBytes
exceFile.InputStream.Read(fileBytes,0,flieBytes.lenght);
3, 二进制数组转成内存流
MemoryStream excelMemoryStream=new MemoryStream(fileBytes);
4, 利用NPOI把内存流中的数据读取成Excel
4.1,将内存流转换为工作簿
判断有没有表,行
5, 使用NPOI读取数据
为了方便读取数据,将数据保存到DataTable中
5.1,获取Excel中的标题行,设置dataTable的列名,第二行为标题行 索引为1
NPOI.SS.UserModel.IRow rowHeader=sheet.GetRow(1);
FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数!!!!!
FirstRowNum:获取第一个实际行的下标
LastRoeNum:获取最后一个实际行的下标
用这些值可以获取到 表格的列数和行数;
工作簿—工作表—行—列
5.2,创建DataTable中的列
通过上标下标 通过遍历行中的每一个单元格,获取标题行各个单元格的数据
把列添加到DataTable
5.3,读取Excel中的数据
获取行的数据
DataTable中创建一行 ,遍历行中列的数据
5.4,去除空行
5.5,把DataTable转换成List<S_user>
查询出数据库的数据与DataTable中的数据进行匹配。

-----图片上传
绑定显示图片到页面
指定查询图片的格式

文件读取器获取图片文件 var inmgeReader=new FileReader();
文件读取器onload事件 在读取文件完成后触发,获取文件所在位置
文件上传的改变事件 获取输入框里面文件,转换成URL
文件提交到控制器,必须要用formData提交
使用formdata时必须要添加
使用jQuery的ajax提交
ProcessData:false,//告诉jQuery不要去处理发送的数据
ContentType:false,//告诉jQuery不要去设置Content-Type请求头
!!!!!!!!!!一定要加这两个条件,否则文件会提交失败。
!!!!!!!!!!文件上传时只能使用post提交
控制器
检查存放图片的目录是否存在,如果不存在就创建
数据库保存的不是图片而是图片的地址,所以要获取他的文件地址
进行保存文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值