渲 染
//存放layui相关模块
var layuiTable, laydate, layer; var先声明layui相关模块用于方便调用
//pnr 表格
var tabPNR;
$(document).ready(function () {
//加载layui组件 layui.use是用来加载layui要用的组件模块
layui.use([‘layer’, ‘table’, ‘laydate’], function () {
layuiTable = layui.table;
laydate = layui.laydate;
layer = layui.layer;
//初始化日期控件
laydate.render({
elem: ‘#searchFlightDate’,
type: ‘date’,
btns: [‘now’, ‘confirm’],
trigger: ‘click’ //解决Laydate一闪而过的问题
});
//渲染表格 render是用来渲染你
tabPNR = layuiTable.render({
elem: ‘#tabPNR’, //id
url:’@Url.Content("~/PNR/PNRQueryController/SelectPNR")’, //路径
cols: [[ //表头 titlebR标题名称 type类型可单、复选 align左中右
field表格数据内容 templet自定义想设计调用进去
{ title: ‘序号’, type: ‘numbers’, align: ‘center’ },
{ title: ‘旅客姓名’, align: ‘center’, templet: customPassengers },
{ title: ‘PNR’, field: ‘PNRNo’, align: ‘center’ },
{ title: ‘航班号’, field: ‘flightCode’, align: ‘center’ },
{ title: ‘订座情况’, field: ‘strPNRStatus’, align: ‘center’ },
//{ title: ‘航班日期’, field: ‘flightDate’, align: ‘center’, width: 160 },
{ title: ‘航班日期’, templet: customDate, align: ‘center’, width: 160 },
{ title: ‘操作’, align: ‘center’, templet: customOperate ,width:160},
]],
page: true
});
});
});
//表格自定义列–操作列 templet自定义想设计调用进去
function customOperate(rowData) {
return ‘查看/修改’;
}
查 询
///
/// 1.0 查询PNR数据 ///绿色是注销,注销后没有代码作用只供观看
///
/// 分页
/// PNRNo
/// 旅客姓名
/// 航班号
/// 航班日期
/// public公有 private私有 ActionResult超做方法
SelectPNR名称用于调用 LayuiTablePage表格 LayuiTablePage 表格名字 string字符串类型 PNRNo名字
public ActionResult SelectPNR(LayuiTablePage layuiTablePage, string PNRNo, string passengerName, string flightCode, string flightDate)
{
//连表查询出所有的PNR数据 #region #endregion一对展开收缩功能,旁边可以带备注
#region 连表查询出所有的PNR数据 from in查询 join链表 on继续 equals等于
var tempPNRlinq = from tbPNR in myModel.B_PNR
join tbPNRPassenger in myModel.B_PNRPassenger on tbPNR.PNRID equals tbPNRPassenger.PNRID
join tbPNRSegment in myModel.B_PNRSegment on tbPNR.PNRID equals tbPNRSegment.PNRID
join tbFlight in myModel.S_Flight on tbPNRSegment.flightID equals tbFlight.flightID
select new
{ =是负极,说明左边有右边功能
PNRID = tbPNR.PNRID,//PNRID
PNRNo = tbPNR.PNRNo,//PNR编号
passengerName = tbPNRPassenger.passengerName,
flightCode = tbFlight.flightCode,//航班号
flightDate = tbFlight.flightDate,//航班日期
PNRStatus = tbPNR.PNRStatus//PNR状态
};
#endregion
//查询有多少条数据,查询数据总条数
int intTotalRow = listUser.Count();
}新 增
//===3、创建PNR航段信息并添加到pnrSegments中
变量名字.add添加new新建
pnrSegments.Add(new B_PNRSegment
{
PNRID = PNRID,//PNRID
segmentNo = (i + 1), //航段号
flightID = sFlightCabin.flightID, //航班ID
cabinTypeID = sFlightCabin.cabinTypeID, //舱位类型ID
flightCabinID = sFlightCabin.flightCabinID, //航班舱位ID
bookSeatNum = passengerNum, //订座数量
bookSeatInfo = 1, //订座情况: 1:已预订座位;,2:部分出票,3:全部出票,0:取消订座
invalid = true //设置航段有效
});
修 改
//开启事务
//开启事务,多表使用建议开启
using (TransactionScope scope = new TransactionScope())
{
try 捕捉错误
{
//遍历修改数据 (双循环) foreach 循环PNRPassenger 表格dbPassenger 名字
foreach (B_PNRPassenger dbPassenger in dbPassengers) 要循环的对象
{
foreach (B_PNRPassenger passenger in passengers)
{ if判断
if (dbPassenger.PNRPassengerID == passenger.PNRPassengerID)
{
//如果页面传递的(修改后的名称为空),结束循环,返回,提示用户,
if (string.IsNullOrEmpty(passenger.passengerName))
{
msg.Text = string.Format(“第{0}位旅客的姓名未输入,请检查。”, dbPassenger.passengerNo);
return Json(msg, JsonRequestBehavior.AllowGet);
}
//更新 dbPassengers中的旅客名称
dbPassenger.passengerName = passenger.passengerName.Trim();
Entry更新登记占用 //将修改后的PNR旅客信息保存到数据库
myModel.Entry(dbPassenger).State = System.Data.Entity.EntityState.Modified;
myModel.SaveChanges();
}
}
}
//所有旅客修改完成后提交事务
scope.Complete();
//返回成功
msg.State = true;
msg.Text = “修改成功”;
}
catch (Exception e)
{
Console.WriteLine(e);
msg.Text = “修改成功”;
}
}
删 除
//====删除旅客
//查询出要删除的旅客
List<B_PNRPassenger> deletePassengers = (from tbPNRPassenger in myModel.B_PNRPassenger
确定某元素在list里面 where PNRPassengerIDs.Contains(tbPNRPassenger.PNRPassengerID)
Contains select tbPNRPassenger).ToList();
//删除数据
myModel.B_PNRPassenger.RemoveRange(deletePassengers);
myModel.SaveChanges();保存
导 出
Excel的数据处理功能非常强大,我们经常会从数据库或DataTable等数据源导入到Excel文档来进行数据分析或运算,有时候又需要将Excel文档中的数据导出到数据库或者Datatable来读取数据。
//==1-检查模板文件是否存在
// Server.MapPath 将相对的路径转为实际的物理路径
Server获取提供 Web 请求处理期间使用的方法的 HttpServerUtilityBase 对象。
MapPath在派生类中重写时,返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。
二 string templatePath = Server.MapPath("~/Document/ARDataTemplate.xls");
//判断模板是否存在 Exists确定文件是否存在
if (!System.IO.File.Exists(templatePath))
{
//如果不存在,就返回失败信息
return Content(“导出失败,请联系网站管理员”);
}
//==2-使用NPOI打开模板Excel
//=2.1-使用文件打开模板文件 Open打开指定路径上的 System.IO.FileStream,具有读/写访问权限 (第一个你要打开的路径,第二个指定超做系统打开的文件,三打开文件)
FileStream templateStream = System.IO.File.Open(templatePath, FileMode.Open);
三 //=2.2-使用NPOI打开模板Excel 得到一个工作簿
NPOI.HSSF.UserModel.HSSFWorkbook excelBookTemplate = new NPOI.HSSF.UserModel.HSSFWorkbook(templateStream);
//==3-打开模板所在第一个工作表
NPOI.SS.UserModel.ISheet sheet = excelBookTemplate.GetSheetAt(0);
//构建单元格样式
NPOI.SS.UserModel.ICellStyle style = excelBookTemplate.CreateCellStyle();
//把Excel转化为流,输出
四 MemoryStream BookStream = new MemoryStream();//定义内存流
excelBookTemplate.Write(BookStream);//将工作薄写入内存流 Write打开文件写入
BookStream.Seek(0, SeekOrigin.Begin);//输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度 Seek将当前流中的位置设置为指定值。
/*参数:File(fileStream要发送到响应的流,
contentType内容类型(MIME 类型),
fileDownloadName浏览器中显示的文件下载对话框内要使用的文件名。) */
return File(BookStream, “application/vnd.ms-excel”, fileName);
一 导入、导出
导 入
public ActionResult DownImportTemplate()
二 { 指定虚拟路径相对应的物理模板文件路径,检查Excel、工作簿和工作表是否存在
//返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。
string filePath = Server.MapPath("~/Document/用户导入模板.xls");
//判断模板文件是否存在
if (System.IO.File.Exists(filePath))
{Path对包含文件或目录路径信息的 System.String 实例执行操作。这些操作是以跨平台的方式执行的 声明字符串和实例化通用对话框
//获取文件的名称 GetFileName返回指定路径字符串的文件名和扩展名。
string strfileName = Path.GetFileName(filePath);
return File(new FileStream(filePath, FileMode.Open), “application/octet-stream”, strfileName);
}else
{ //使用字符串创建一个内容结果对象。
return Content(“模板文件不存在,请联系系统运维人员。”);
} }
把文件转换为二进制数组,二进制数组转成内存流,利用NPOI把内存流中的数据读取成Excel,判断工作表中是否有数据,然后把Excel保存到临时表格里面(DataTable中),获取模板文件格式,
使用NPOI读取数据,将数据循环添加标题行中各个单元格的值,导入到工作表的单元格。
图片上传
//====判断是否上传了新图片
if (userPicture != null && userPicture.ContentLength > 0)
{
//上传了图片
//==保存新上传的文件
//文件类型 FileName 在派生类中重写时,获取客户端上文件的完全限定名。
string imgExtension = Path.GetExtension(userPicture.FileName);
//文件名称
string imgFileName = DateTime.Now.ToUniversalTime().ToString(“yyyyMMddHHmmssffff”) + “_” + Guid.NewGuid() + imgExtension;
//保存文件的路径
string imgFilePath = Server.MapPath("~/Document/userPicture/") + imgFileName;
//保存文件
userPicture.SaveAs(imgFilePath);
//将文件名称设置到用户中
user.picture = imgFileName;
//==判断之前是否存在图片,存在就先删除
if (!string.IsNullOrEmpty(oldPicture))
{
//以前存在图片 需要删除
string oldPiciturnPath = Server.MapPath("~/Document/userPicture/") + oldPicture;
if (System.IO.File.Exists(oldPiciturnPath))
{
System.IO.File.Delete(oldPiciturnPath);
} } }
{ //为上传图片 不做任何处理 把数据库中的图片直接设置到user对象 user.picture = oldPicture; }